【问题标题】:visualizing batch_norm parameters in tensorboard在 tensorboard 中可视化 batch_norm 参数
【发布时间】:2019-02-13 06:58:15
【问题描述】:

当我更改批次规范特定的超参数时,我当前的 NN 模型给出了一些异常结果。我想查看批量规范参数 betagamma 随时间的分布情况,以确保批量规范没有做奇怪的事情。

使用 tensorboard 最容易将学习到的权重或偏差可视化,但我不确定如何使用 betagamma 来做到这一点,因为它们是定义和管理的在tf.layers.batch_normalizationtf.contrib.layers.batch_norm 内。

有没有一种简单的方法来引用 betagamma 并将它们放入直方图摘要中,而无需编写我自己的批处理规范版本?

【问题讨论】:

    标签: tensorflow neural-network tensorboard


    【解决方案1】:

    为他们创建一个摘要仍然是一件苦差事,但这就是我想出的访问gammabeta 的方法:

    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)
    

    【讨论】:

      【解决方案2】:

      或者,如果您不仅需要访问betagamma 值,还需要控制它们的使用方式,您可以从tf.layers.batch_normalization()False centerscale 并定义自己的比例和偏移功能。像这样:

      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
      

      【讨论】:

        猜你喜欢
        • 2020-05-09
        • 2018-05-25
        • 2019-03-12
        • 2018-03-18
        • 1970-01-01
        • 2019-04-20
        • 2018-11-02
        • 2017-05-30
        • 2018-05-18
        相关资源
        最近更新 更多