Как правильно тренироваться с tf.keras.layers.BatchNormalization: Есть ли еще зависимость tf.GraphKeys.UPDATE_OPS? - PullRequest
1 голос
/ 17 апреля 2019

Моя цель - как правильно обучаться с пакетными слоями нормализации в TensorFlow (TensorFlow версия 1.13.1 для Python в графическом режиме), используя рекомендуемый класс tf.keras.layers.BatchNormalization (https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization).

Более старый рекомендуемый подход заключался в использовании tf.layers.batch_normalization. В документации (https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization) указано, что в настоящее время она устарела вместо tf.keras.layers.BatchNormalization.

При использовании более старого класса в документации указывается, что мы должны явно добавить зависимость от операций обновления среднего и дисперсии, которые в противном случае были бы висячими узлами вне каких-либо зависимостей в обучающих операциях:

update_ops_including_from_batch_norms  =  tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
   my_optimizer = tf.super_cool_optimizer(loss)

Мой вопрос: нужна ли эта явная зависимость от UPDATE_OPS при обучении пакетных норм в TF 1.13 с помощью tf.keras.layers.BatchNormalization? Я не вижу этого упоминания в документации, однако, мне было бы намного удобнее, если бы кто-то точно знал (и даже лучше, если бы мог указать на официальную документацию или код), что об этих рабочих зависимостях неявно заботятся.

1 Ответ

0 голосов
/ 09 июля 2019

Ответ - нет, он не нужен.Это упомянуто в текущей документации на https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization.

В дополнение к этому, я в настоящее время использую tf.layers.BatchNormalization С явной зависимостью от UPDATE_OPS (TF версия 1.10), потому что tf.layers.keras.BatchNormalizationкажется, прослушивается для меня.Моя проверка модели не удалась при использовании tf.layers.keras.BatchNormalization.Возможно, это было исправлено в последнем обновлении.

...