当我更改批处理规范特定的超参数时,我当前的NN模型给出了一些异常结果。我想查看批处理规范参数 beta 和 gamma 随时间的分布,以确保批处理规范没有做任何奇怪的事情。
可视化学习到的权重或偏差最容易使用张量板完成,但是我不确定如何使用 beta 和 gamma 进行此操作,因为它们已定义和管理在tf.layers.batch_normalization
或tf.contrib.layers.batch_norm
中。
是否有一种简单的方法来引用 beta 和 gamma 并将它们放入直方图摘要中,而无需编写自己的批处理规范版本?
答案 0 :(得分:0)
为他们建立摘要仍然很麻烦,但这是我访问gamma
和beta
时想得到的:
def batch_norm(self, x_in):
with tf.variable_scope('batch_norm'):
x = tf.layers.batch_normalization( x_in,
momentum = self.bn_decay,
epsilon = self.bn_epsilon,
training = self.is_training)
gamma = tf.trainable_variables(tf.get_variable_scope().name)[0]
beta = tf.trainable_variables(tf.get_variable_scope().name)[1]
return x
tf.trainable_variables(tf.get_variable_scope().name)
所做的工作是以列表的形式返回当前范围内的所有变量。在这种情况下,有两个变量,第0个是gamma
,第一个是beta
,但是可能会因实现方式的不同而改变。
如果需要特定名称,请使用:
for var in tf.trainable_variables(tf.get_variable_scope().name):
print(var.name)