API низкого уровня Tensorflow, проблема нормализации партии - PullRequest
2 голосов
/ 07 марта 2019

Документация tf.layers.batch_normalization гласит, что она будет удалена в будущей версии и должна быть заменена на tf.keras.layers.BatchNormalization , но я не могу найтиспособ заменить функциональность с помощью тензор потока низкого уровня API.

import tensorflow as tf
bn = tf.layers.batch_normalization(tf.constant([0.0]), training=True)
print(tf.get_collection(tf.GraphKeys.UPDATE_OPS))

, который выводит:

[<tf.Operation 'batch_normalization/AssignMovingAvg' type=AssignSub>,
<tf.Operation 'batch_normalization/AssignMovingAvg_1' type=AssignSub>]

Если вместо этого мы используем керас, как предлагается в документации

bn = tf.keras.layers.BatchNormalization(axis=-1)(tf.constant([0.0]), training=True)

мы получаем пустой вывод:

[]

Так как UPDATE_OPS пуст, модель не может обновить нормализацию партии moving_avg_mean и moving_avg_variance во время обучения с использованием керас (что приводит к гораздо более высокой ошибке теста).Любое предложение, как решить эту проблему, очень приветствуется!

Приведенный выше пример взят из более ранней статьи о том, как использовать tf.layers.batch_normalization

...