визуализация параметров batch_norm в тензорной доске - PullRequest
0 голосов
/ 08 сентября 2018

Моя текущая модель NN дает некоторые аномальные результаты, когда я изменяю специфические гипер-параметры партии. Я хотел бы видеть распределение параметров нормы партии бета и гамма с течением времени, чтобы убедиться, что норма партии не делает что-то странное.

Визуализация изученных весов или смещений проще всего сделать с тензорной доской, но я не уверен, как это сделать с бета и гаммой , поскольку они определены и управляются в tf.layers.batch_normalization или tf.contrib.layers.batch_norm.

Есть ли простой способ сослаться на бета и гамма и поместить их в сводку гистограммы без необходимости писать собственную версию нормы партии?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

В качестве альтернативы, если вам нужен не только доступ к значениям 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
0 голосов
/ 10 сентября 2018

составление сводки для них по-прежнему является рутиной, но это то, что я придумал для доступа к 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, а 1-ая - beta, но это может измениться в другой реализации.

если вам нужны конкретные имена, используйте:

for var in tf.trainable_variables(tf.get_variable_scope().name):
    print(var.name)
...