Я экспериментировал с рядом моделей, доступных в Керасе, в моем наборе данных.Это проблема классификации изображений в 10 классах.Я пробовал тренироваться с нуля, настраивать всю сеть и переносить обучение с каждой архитектурой.Большинство из них довольно хорошо работают с моим набором данных, за исключением обучения с помощью Resnet50.Вот модель, которую я использую:
model = applications.resnet50.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
for layer in model.layers:
layer.trainable = False
x = model.output
x = Flatten()(x)
x = Dense(128, activation="relu")(x)
x = Dropout(0.3)(x)
x = Dense(128, activation="relu")(x)
x = Dropout(0.3)(x)
x = Dense(128, activation="relu")(x)
x = Dropout(0.3)(x)
x = Dense(128, activation="relu")(x)
predictions = Dense(output_dim=10, activation="softmax")(x)
model_final = Model(input=model.input, output=predictions)
Все изображения уже были изменены до (224 x 224) размера пикселя.Я пробовал оптимизатор Adam с различными скоростями обучения и размерами пакетов, такими как:
lr=0.00001, batch=64
lr=0.00005, batch=256
lr=0.001, batch=256
lr=0.001, batch=128
lr=0.001, batch=64
lr=0.001, batch=32
lr=0.0001, batch=64
lr=0.0001, batch=32
lr=0.0001, batch=128
Но, тем не менее, модель предсказывает, что все изображения относятся к одному и тому же классу, а точнее, к классу, который содержит 26%все изображения.Во время обучения потери при обучении уменьшаются, а потеря при проверке возрастает.Точность обучения выше 95% в конце обучения, но точность проверки застряла на 26%.Когда одна и та же модель (Resnet50) обучается с нуля или настраивается, этой проблемы не существует.Модели без пропускаемого соединения (такие как InceptionV3, Xception, VGG16) показывают хорошую производительность все время, будь то обучение с нуля, точная настройка или трансферное обучение.Другие модели, использующие пропускаемые соединения (InceptionResnetV2, DenseNet), не предсказывают, что все изображения будут одного и того же класса, когда используется передача обучения, но точность немного ниже по сравнению с моделями «без пропуска соединения».Опять же, эти модели (InceptionResnetV2, DenseNet) показывают хорошую производительность при использовании обучения с нуля или тонкой настройки.
Итак, мой вопрос:
Есть ли что-то с пропущенным соединением, которое ухудшает производительность модели при использовании трансферного обучения?
Я использую Keras с бэкэндом тензорного потока.