使用tensorflow時,會發現tf.nn,tf.layers, tf.contrib模塊有很多功能是重復的,尤其是卷積操作,在使用的時候,我們可以根據需要現在不同的模塊。但有些時候可以一起混用。
下面是對三個模塊的簡述:
(1)tf.nn :提供神經網絡相關操作的支持,包括卷積操作(conv)、池化操作(pooling)、歸一化、loss、分類操作、embedding、RNN、Evaluation。
(2)tf.layers:主要提供的高層的神經網絡,主要和卷積相關的,個人感覺是對tf.nn的進一步封裝,tf.nn會更底層一些。
(3)tf.contrib:tf.contrib.layers提供夠將計算圖中的 網絡層、正則化、摘要操作、是構建計算圖的高級操作,但是tf.contrib包含不穩定和實驗代碼,有可能以后API會改變。
Batch normalization(BN):
tensorflow中提供了三種BN方法:https://blog.csdn.net/Leo_Xu06/article/details/79054326
tf.nn.batch_normalization
tf.layers.batch_normalization
tf.contrib.layers.batch_norm
以tf.layers.batch_normalization
為例介紹里面所包含的主要參數:
tf.layers.batch_normalization(inputs, decay=0.999, center=True, scale=True, is_training=True, epsilon=0.001)
一般使用只要定義以下的參數即可:
-
inputs: 輸入張量[N, H, W, C]
-
decay: 滑動平均的衰減系數,一般取接近1的值,這樣能在驗證和測試集上獲得較好結果
-
center: 中心偏移量,上述的ββ ,為True,則自動添加,否則忽略
-
scale: 縮放系數,上述的γγ,為True,則自動添加,否則忽略
-
epsilon: 為防止除0而加的一個很小的數
- is_training: 是否是訓練過程,為True則代表是訓練過程,那么將根據decay用指數滑動平均求得moments,並累加保存到
moving_mean
和moving_variance
中。否則是測試過程,函數直接取這兩個參數來用。
如果是True,則需在訓練的session中添加將BN參數更新操作加入訓練的代碼:
# execute update_ops to update batch_norm weights update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS) with tf.control_dependencies(update_ops): optimizer = tf.train.AdamOptimizer(decayed_learning_rate) train_op = optimizer.minimize(loss, global_step = global_step)
附官網鏈接:
https://www.tensorflow.org/api_docs/python/tf/nn/batch_normalization