Почему moving_mean и moving _variance в слое Tensorflow BN станут nan, если я установил is_training = False во время обучения? - PullRequest
0 голосов
/ 18 июня 2020

Во время обучения я хочу, чтобы слой BN оставался неизменным, поэтому я передаю is_training = False в :

tf.contrib.layers.batch_norm(tensor_go_next, decay=0.9, center=True, scale=True, epsilon=1e-9,
                                              updates_collections=tf.GraphKeys.UPDATE_OPS,
                                              is_training=False, scope=name_bn_scope)

и не помещаю name_bn_scope/gamma:0 name_bn_scope/beta:0 для обучения var_list.

После тренировки гамма и бета остаются прежними, чего я и хочу. Но moving_mean и moving _variance станут матрицей nan после обучения, что приведет к точности 0,1%.

Я не понимаю, почему, доза не is_pting = Поток тензора ложной силы, чтобы сохранить moving_mean и moving _variance без изменений? Как я могу это исправить и реализовать?

слой BN так долго мучил меня, пожалуйста, помогите!

1 Ответ

0 голосов
/ 18 июня 2020

Ага, я понял: блок кода, показанный ниже, должен быть прокомментирован! (Который используется, чтобы заставить Tensorflow изменять moving_mean / moving_variance в слое bn при запуске train_op. Поскольку я не хочу изменять их во время обучения , затем его следует удалить.)

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_op = optimizer.minimize(loss, name = 'train_op', var_list = var_list_to_train)

Я также узнал, что, когда вы застряли в ловушке ошибок, возможно, go снаружи, чтобы сделать перерыв, - лучший способ выяснить, как найти ошибки и затем решить их , что немного похоже на уловки в глубоком обучении для выхода из локального минимума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...