tf.layers.batch_normalizationのドキュメントには、将来のバージョンで削除され、tf.keras.layers.BatchNormalizationに置き換える必要があると書かれていますが、tensorflow の低レベル 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>]
ドキュメントで提案されているように、代わりに keras を使用する場合
bn = tf.keras.layers.BatchNormalization(axis=-1)(tf.constant([0.0]), training=True)
空の出力が得られます。
[]
UPDATE_OPS が空であるため、モデルは keras を使用したトレーニング中にバッチ正規化の moving_avg_mean と moving_avg_variance を更新できません (その結果、より大きなテスト エラーが発生します)。これを解決する方法についての提案は大歓迎です!