← Вернуться к списку

Моя дообученная модель вообще чему-нибудь учится?

Краткое содержание

Я тренируюсь в тонкой настройке Resnet50 для задачи бинарной классификации. Вот фрагмент моего кода: base_model = ResNet50(weights='imagenet', include_top=False) x = base_model.output x = keras.layers.GlobalAveragePooling2D(name='avg_pool')(x) x = Dropout(0.8)(x) model_prediction = keras.layers.Dense(1, activation='sigmoid', name='predictions')(x) model = keras.models.Model(inputs=base_model.input, outputs=model_prediction) opt = SGD(lr = 0.01, momentum = 0.9, nesterov = False) model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy']) train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=False) test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( './project_01/train', target_size=(input_size, input_size), batch_size=batch_size, class_mode='binary') validation_generator = test_datagen.flow_from_directory( './projec

Полный текст

Моя модель с тонкой настройкой вообще чему-нибудь учится? Задать вопрос

Задан 6 лет, 1 месяц назад Изменен сегодня Просмотрен 204 раза

Задан 6 лет, 1 месяц назад

2 $\begingroup$ Я тренируюсь в тонкой настройке Resnet50 для задачи бинарной классификации. Вот фрагмент моего кода. base_model = ResNet50(weights='imagenet', include_top=False) x = base_model.output x = keras.layers.GlobalAveragePooling2D(name='avg_pool')(x) x = Dropout(0.8)(x) model_prediction = keras.layers.Dense(1, activation='sigmoid', name='predictions')(x) model = keras.models.Model(inputs=base_model.input, outputs=model_prediction) opt = SGD(lr = 0.01, momentum = 0.9, nesterov = False) model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy']) # train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=False) test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( './project_01/train', target_size=(input_size, input_size), batch_size=batch_size, class_mode='binary') validation_generator = test_datagen.flow_from_directory( './project_01/val', target_size=(input_size, input_size), batch_size=batch_size, class_mode='binary') hist = model.fit_generator( train_generator, steps_per_epoch= 1523 // batch_size, # 759 + 764 NON = 1523 epochs=epochs, validation_data=validation_generator, validation_steps= 269 // batch_size) # 134 + 135NON = 269 Я построил график модели после 50 эпох обучения: Вы, возможно, заметили, что train_acc и val_acc сильно колебались, и train_acc едва достигает 52%, что означает, что сеть не учится, не говоря уже о переобучении на данных. Что касается потерь, у меня нет никаких идей. Перед началом обучения сеть выдает: Найдено 1523 изображений, относящихся к 2 классам. Найдено 269 изображений, относящихся к 2 классам. Вообще, моя модель с тонкой настройкой чему-нибудь учится? Буду признателен, если кто-нибудь сможет подсказать, как решить эту проблему. convolutional-neural-networks training keras transfer-learning fine-tuning Поделиться Улучшить этот вопрос Следить отредактировано 23 мая 2021 г. в 13:16 nbro 43,2 тыс. 14 14 золотых значков 121 121 серебряных значков 222 222 бронзовых значков задан 28 декабря 2019 г. в 07:17 bit_scientist 241 2 2 золотых значка 5 5 серебряных значков 16 16 бронзовых значков $\endgroup$ 2 $\begingroup$ Вы основываете этот код на каком-то существующем скрипте? Как вы решили использовать скорость отсева 0.8 и скорость обучения 0.01? (Скорость отсева очень высока, скорость обучения, вероятно, слишком высока). Какой у вас размер пакета? $\endgroup$ Mathias Müller – Mathias Müller 2020-01-29 10:06:26 +00:00 Прокомментировано 29 января 2020 г. в 10:06 $\begingroup$ @MathiasMüller они взяты из других тестов моделей, которые я тренировал. На самом деле я попробовал несколько гиперпараметров. Сейчас модель VGG16 работает довольно хорошо. $\endgroup$ bit_scientist – bit_scientist 2020-03-26 11:28:52 +00:00 Прокомментировано 26 марта 2020 г. в 11:28 Добавить комментарий | 1 Ответ 1 Сортировка по: Сбросить по умолчанию Наивысший балл (по умолчанию) Дата изменения (сначала новые) Дата создания (сначала старые) 0 $\begingroup$ Трудно сказать, не зная, как выглядят ваши данные, но судя по цифрам, их слишком мало, и изображения могут быть слишком похожи друг на друга или очень сильно отличаться. В любом случае, я бы проверил, используя другие сети, такие как Inception, и еще больше уменьшил скорость обучения (например, до 0.0001), чтобы не нарушить веса Imagenet, если ваши данные сильно отличаются от классов Imagenet. Поделиться Улучшить этот ответ Следить ответил 28 декабря 2019 г. в 10:45 deadcode 101 $\endgroup$ 3 $\begingroup$ большое спасибо, мои изображения похожи друг на друга, как эти сигнальные изображения. Можете ли вы дать какие-либо дополнительные обновления? $\endgroup$ bit_scientist – bit_scientist 2019-12-28 10:48:46 +00:00 Прокомментировано 28 декабря 2019 г. в 10:48 $\begingroup$ В этом случае, на мой взгляд, количество изображений крайне недостаточно. Я бы сначала попробовал создать пользовательскую сеть с очень небольшим количеством слоев и посмотрел, есть ли какие-либо улучшения. Огромные архитектуры, такие как Resnet и т. д., обычно не работают с небольшими данными. $\endgroup$ de