Не удается установить слой BatchNormalization в режим вывода после обучения - PullRequest
0 голосов
/ 24 января 2020

У меня есть проблема со слоем 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...