У меня есть проблема со слоем BatchNormalisation. Моя потеря не та же самая после тренировки и оценки / прогнозирования. Даже если я установлю Model.trainable = False и перекомпилирую. Мой набор данных содержит только 1 изображение, чтобы правильно проанализировать проблему. Как описано в документации , настройка обучаемого на False должна переключить слой BatchNorm в режим вывода
На 1.e10 выше, чем потеря обучения
Окружающая среда :
- Python 3.5.4
- tenorflow-GPU 2.1
- Windows 10
Код:
def buildModelMNBackbone():
base_model = tf.keras.applications.MobileNetV2(input_shape=(IMG_WIDTH, IMG_HEIGHT, 3),
include_top=False,
weights='imagenet',
layers=tf.keras.layers,
alpha=1.0,
pooling='avg')
base_model.trainable = False
dense = tf.keras.layers.Dense(100,activation='relu')
batchNorm = tf.keras.layers.BatchNormalization()
reg_op = tf.keras.layers.Dense(4,activation='linear',name='key_point')
model = tf.keras.Sequential([
base_model,
dense,
batchNorm,
reg_op
])
model.summary()
return model
model = buildModelMNBackbone()
adam = tf.keras.optimizers.Adam(learning_rate = 0.005)
model.compile(optimizer=adam,loss='mse', metrics=['mse'])
EPOCHS = 100
BATCH_SIZE = min(numberOfImages, 64)
STEPS_PER_EPOCH = max(numberOfImages // BATCH_SIZE, 2)
SHUFFLE_BUFFER_SIZE = min(numberOfImages, 100)
train_batches = dataset.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE).repeat()
model_history = model.fit(train_batches, epochs=EPOCHS,
steps_per_epoch=STEPS_PER_EPOCH,
callbacks=[])
print("Saving model...")
model.save('KeypointPredictor.h5')
modelLoaded = tf.keras.models.load_model('KeypointPredictor.h5')
modelLoaded.trainable = False
adam = tf.keras.optimizers.Adam(learning_rate = 0.005)
modelLoaded.compile(optimizer=adam,loss='mse', metrics=['mse'])
modelLoaded.summary()
modelLoaded.evaluate(train_batches, steps=1)
И весь проект, содержащий 1 данные, генератор наборов данных и приведенный выше код, готов к запуску / комментированию слоя batchNorm: ЗДЕСЬ
Заранее спасибо. С уважением, --Selim