Пакетная нормализация в Керасе - PullRequest
0 голосов
/ 04 мая 2018

Как обновить скользящее среднее и скользящую дисперсию в кератах BatchNormalization?

Я нашел это в документации по тензорному потоку, но я не знаю, где поставить train_op или как работать с моделями keras:

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
        with tf.control_dependencies(update_ops):
            train_op = optimizer.minimize( loss )

Нет найденных сообщений, которые говорят о том, что делать с train_op и можете ли вы использовать его в model.compile.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вам не нужно вручную обновлять скользящее среднее и отклонения, если вы используете слой BatchNormalization. Keras позаботится об обновлении этих параметров во время обучения и сохранении их фиксированными во время тестирования (используя функции model.predict и model.evaluate, так же, как с model.fit_generator и друзьями).

Keras также отслеживает фазу обучения, поэтому во время обучения и проверки / тестирования запускаются разные пути кодирования.

0 голосов
/ 04 мая 2018

Если вам нужно просто обновить веса для существующей модели с некоторыми новыми значениями, то вы можете сделать следующее:

w = model.get_layer('batchnorm_layer_name').get_weights()
# Order: [gamma, beta, mean, std]
for j in range(len(w[0])):
    gamma = w[0][j]
    beta = w[1][j]
    run_mean = w[2][j]
    run_std = w[3][j]
    w[2][j] = new_run_mean_value1
    w[3][j] = new_run_std_value2

model.get_layer('batchnorm_layer_name').set_weights(w)
...