【发布时间】:2018-10-14 07:55:25
【问题描述】:
如何在 keras BatchNormalization 中更新移动均值和移动方差?
我在 tensorflow 文档中找到了这个,但我不知道在哪里放置 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 中使用它。
【问题讨论】:
-
你想做什么?通常,您不需要为 BatchNormalization 做任何事情就可以在 Keras 中工作。
-
我只是想使用 BatchNormalization。让我感到困惑的是 Tensorflow 和 Keras 之间的差异,所以我不确定我是否真的不需要做任何其他事情(除了确保在验证期间关闭 BatchNormalization),或者我是否必须手动更新移动平均值和差异。
-
@MatiasValdenegro 从
optimizer.minimize(loss)看来,他正在尝试手动执行梯度下降步骤(而不是使用更高级别的 API 来驱动拟合)。optimizer.minimize()(例如,使用 'AdamOptimizer' 或 'GradientDescentOptimizer')将使用梯度下降来更新一步的常规权重,但它不会对批量范数均值和方差做任何事情。 -
对我来说,如果我使用
batch_normed = tf.keras.layers.BatchNormalization()(hidden, training=True),update_ops是空的。所以似乎没有更新移动平均线(例如batch_normalization/moving_mean)
标签: tensorflow keras batch-normalization