Форум сайта python.su
Имеется датасет (фото объектов) из 41 класса и 31 подкласса (не каждый класс содержит подклассы). Подскажите как сделать, что бы модель распознавала изображения не только по классам, но и подклассам?
dataset_dir = pathlib.Path(.....) batch_size = 32 img_width = 200 img_heigth = 200 dataset_train = tf.keras.utils.image_dataset_from_directory( dataset_dir, validation_split = 0.2, subset= 'training', seed = 123, image_size = (img_heigth, img_width), batch_size = batch_size) dataset_validation = tf.keras.utils.image_dataset_from_directory( dataset_dir, validation_split = 0.2, subset= 'validation', seed = 123, image_size = (img_heigth, img_width), batch_size = batch_size) class_names = dataset_train.class_names print(f'Class names: {class_names}') model = Sequential([Rescaling(1./255, input_shape=(img_heigth, img_width, 3)), #аугментация RandomFlip("horizontal"), RandomRotation(0.2), RandomZoom(0.2), RandomContrast(0.2), #слои сверточные tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'), tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'), tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'), tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'), tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'), tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Dropout(0.2), tf.keras.layers.BatchNormalization(), tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'), tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Dropout(0.2), tf.keras.layers.BatchNormalization(), # полносвязные слои tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.BatchNormalization(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.BatchNormalization(), #выходной слой равный числу классов классификации изображений tf.keras.layers.Dense(num_classes)]) model.compile(optimizer='Adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) model.summary()
Офлайн
Demon-rubскинь датасет, если большой,то можно урезанный. И что нужно определить
Имеется датасет (фото объектов) из 41 класса и 31 подкласса (не каждый класс содержит подклассы)
Отредактировано xam1816 (Авг. 4, 2024 23:17:55)
Офлайн
Извиняюсь) а как тут скинуть сильно подрезанный дата сет? Подклассы имеются только в классе YADOVITIE. Нужно что бы нейросеть определяла не только класс гриба на фото, но и подкласс (если они имеются в данном классе). Заранее благодарен!)
Офлайн
Demon-rubзапакуй в архив и куда-нибудь типа яндекс диск закинь, сюда ссылку
а как тут скинуть сильно подрезанный дата сет?
Офлайн
Офлайн
Demon-rub
Подскажите как сделать, что бы модель распознавала изображения не только по классам, но и подклассам?
Офлайн
Demon-rub
model = Sequential([Rescaling(1./255, input_shapeimg_heigth, img_width, 3)),
#аугментация
RandomFlip(“horizontal”),
RandomRotation(0.2),
RandomZoom(0.2),
RandomContrast(0.2),
#слои сверточные
tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
# полносвязные слои
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
#выходной слой равный числу классов классификации изображений
tf.keras.layers.Dense(num_classes)])
Офлайн
Я так и сделал, в последней версии дата сета все виды и подвиды в каталоге “Классы”. Последний дата сет тоже буду дорабатывать и по классам и по набору данных. Точность - разная (на фото пример распознавания гриба которого нету в дата сете, но честно это лучший результат. Прекратил дальнейшее обучение -работаю над дата сетом))
Прикреплённый файлы:
Снимок экрана (76).png (469,3 KБ)
Офлайн