Невозможно использовать EfficientNet с трансферным обучением

Я хочу использовать EfficientNet с трансферным обучением в наборе данных Eurosat-rgb. У меня проблема в том, что он, похоже, не учится.

Во-первых, я начинаю со следующей модели, используя трансферное обучение с MobileNet, и она отлично работает (1)

model_base = tf.keras.applications.MobileNet(weights='imagenet', include_top=False, input_shape=input_shape=(224,224,3))
model_base.trainable=False
model = tf.keras.Sequential([
  model_base,
  tf.keras.layers.GlobalAveragePooling2D(name="avg_pool"),
  tf.keras.layers.Dense(10, activation="softmax", name="predictions")
])

Затем я переключаюсь с MobileNet на EfficientNetB1, и вдруг он ничего не узнает (2). И затем, если я попробую с model_base.trainable=True, точность обучения улучшится, но не точность проверки (3).

Что я делаю не так?

Если я использую EfficientNet без обучения переносу, я тоже получаю хорошие результаты (4), но это требует много времени. время очевидно. Я также пытался изменить оптимизатор с sgd на adam, но это тоже не работает.


person adrian beltran    schedule 19.05.2021    source источник


Ответы (1)


Я думаю, что происходит то, что для Mobilenet функция предварительной обработки масштабирует изображения от -1 до +1. Однако для EfficientNetB1 документация, расположенная здесь, гласит

Note: each Keras Application expects a specific kind of input preprocessing.
For EfficientNet, input preprocessing is included as part of the model 
(as a Rescaling layer), and thus tf.keras.applications.efficientnet.preprocess_input
is actually a pass-through function.
EfficientNet models expect their inputs to be float tensors of pixels with values
in the [0-255] range.

Поэтому, когда вы переходите с Mobilenet на Efficientnet, обязательно удалите любое изменение масштаба значений пикселей.

person Gerry P    schedule 19.05.2021