Tensorflow Batch_を正しく使用normalization

2080 ワード

余談:tensorflow,tf.contribはいくつかの試行コードまたは不安定なコードであり、将来廃棄または削除される可能性がある.tf.Layersの中にはすでに確定したコードがあり、ほとんど大きな変更はありません.tf.nnは最も基本的なコードで、レベルが最も低く、基本的には変わりませんが、様々な機能を実現するには、自分で別のapiを組み合わせて実現する必要があります.
tfを使用する.layers.batch_normalization()は、まずapiインタフェースです:クリックしてリンクを開きます
注意:
トレーニング:
1.training=Trueを設定する.
2.スライド平均値を保存するために、次のコードを追加し、テスト時に使用します.
Note: when training, the moving_mean and moving_variance need to be updated. By default the update ops are placed in  tf.GraphKeys.UPDATE_OPS , so they need to be added as a dependency to the  train_op . Also, be sure to add any batch_normalization ops before getting the update_ops collection. Otherwise, update_ops will be empty, and training/inference will not work properly. For example:
  x_norm = tf.layers.batch_normalization(x, training=training)

  # ...

  update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
  with tf.control_dependencies(update_ops): #  train_op update_ops       。
    train_op = optimizer.minimize(loss)

3.モデルを保存する場合:
var_list = tf.trainable_variables() 
g_list = tf.global_variables()
bn_moving_vars = [g for g in g_list if 'moving_mean' in g.name]
bn_moving_vars += [g for g in g_list if 'moving_variance' in g.name]
var_list += bn_moving_vars
saver = tf.train.Saver(var_list=var_list, max_to_keep=5)

スライド平均値を保存します.そうしないと、モデルをロード中にエラーが発生します.
予測:
training=Falseを設定します.(トレーニング時のbatch_sizeが1に設定されている場合、training=Falseのテスト効果は必ずしも良好ではないが、トレーニング時のbatch_sizeが小さすぎるため、スライド平均値が不安定になる可能性がある.スライド平均値を用いたテスト効果が悪いため、逆にtraining=Trueに設定した方が効果的である.スーパーパラメータとして試してみることができる.)
クリックしてリンクを開く
この人はtraining=Falseを使っても、テスト時に効果が悪いと提案し、テスト時に使ってみました.
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    logits = yourmodel.infersence(inputs_)

クリックしてリンクを開くbatch_size=1の場合batch_normは実はinstance_normの説明.参照先:https://www.cnblogs.com/hrlnw/p/7227447.html