在 tensorboard 中可视化 batch_norm 个参数
visualizing batch_norm parameters in tensorboard
当我更改特定于批量规范的超参数时,我当前的神经网络模型给出了一些异常结果。我想查看批处理规范参数 beta 和 gamma 随着时间的推移的分布,以确保批处理规范不会做一些奇怪的事情.
张量板最容易可视化学习到的权重或偏差,但我不确定如何使用 beta 和 gamma 因为它们是在 tf.layers.batch_normalization
或 tf.contrib.layers.batch_norm
.
中定义和管理的
有没有一种简单的方法可以引用 beta 和 gamma 并将它们放入直方图摘要中,而无需编写我自己的版本批量规范?
为他们构建摘要仍然是一件苦差事,但这是我为访问 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)
所做的是return当前范围内的所有变量以列表的形式。在这种情况下,有两个变量,第 0 个是 gamma
,第一个是 beta
,但这可能会随着不同的实现而改变。
如果您需要特定名称,请使用:
for var in tf.trainable_variables(tf.get_variable_scope().name):
print(var.name)
或者,如果您不仅需要访问 beta
和 gamma
值,而且还需要控制它们的使用方式,您可以 False
center
和 scale
来自 tf.layers.batch_normalization()
并定义您自己的缩放和偏移功能。像这样:
def batch_norm(self, x, name = 'batch_norm'):
with tf.variable_scope(name):
x = tf.layers.batch_normalization( x,
momentum = .99,
epsilon = .0001,
center = False,
scale = False,
training = self.is_training)
gamma = tf.get_variable(
name = 'gamma',
shape = x.get_shape()[-1],
initializer = tf.ones_initializer())
beta = tf.get_variable(
name = 'beta',
shape = x.get_shape()[-1],
initializer = tf.zeros_initializer())
x = gamma*x + beta
return x
当我更改特定于批量规范的超参数时,我当前的神经网络模型给出了一些异常结果。我想查看批处理规范参数 beta 和 gamma 随着时间的推移的分布,以确保批处理规范不会做一些奇怪的事情.
张量板最容易可视化学习到的权重或偏差,但我不确定如何使用 beta 和 gamma 因为它们是在 tf.layers.batch_normalization
或 tf.contrib.layers.batch_norm
.
有没有一种简单的方法可以引用 beta 和 gamma 并将它们放入直方图摘要中,而无需编写我自己的版本批量规范?
为他们构建摘要仍然是一件苦差事,但这是我为访问 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)
所做的是return当前范围内的所有变量以列表的形式。在这种情况下,有两个变量,第 0 个是 gamma
,第一个是 beta
,但这可能会随着不同的实现而改变。
如果您需要特定名称,请使用:
for var in tf.trainable_variables(tf.get_variable_scope().name):
print(var.name)
或者,如果您不仅需要访问 beta
和 gamma
值,而且还需要控制它们的使用方式,您可以 False
center
和 scale
来自 tf.layers.batch_normalization()
并定义您自己的缩放和偏移功能。像这样:
def batch_norm(self, x, name = 'batch_norm'):
with tf.variable_scope(name):
x = tf.layers.batch_normalization( x,
momentum = .99,
epsilon = .0001,
center = False,
scale = False,
training = self.is_training)
gamma = tf.get_variable(
name = 'gamma',
shape = x.get_shape()[-1],
initializer = tf.ones_initializer())
beta = tf.get_variable(
name = 'beta',
shape = x.get_shape()[-1],
initializer = tf.zeros_initializer())
x = gamma*x + beta
return x