使用tensorflow時,會發現tf.nn,tf.layers, tf.contrib模塊有不少功能是重複的,尤爲是卷積操做,在使用的時候,咱們能夠根據須要如今不一樣的模塊。但有些時候能夠一塊兒混用。python
下面是對三個模塊的簡述:api
(1)tf.nn :提供神經網絡相關操做的支持,包括卷積操做(conv)、池化操做(pooling)、歸一化、loss、分類操做、embedding、RNN、Evaluation。網絡
(2)tf.layers:主要提供的高層的神經網絡,主要和卷積相關的,我的感受是對tf.nn的進一步封裝,tf.nn會更底層一些。session
(3)tf.contrib:tf.contrib.layers提供夠將計算圖中的 網絡層、正則化、摘要操做、是構建計算圖的高級操做,可是tf.contrib包含不穩定和實驗代碼,有可能之後API會改變。函數
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
爲例介紹裏面所包含的主要參數:google
tf.layers.batch_normalization(inputs, decay=0.999, center=True, scale=True, is_training=True, epsilon=0.001)lua
通常使用只要定義如下的參數便可:spa
inputs: 輸入張量[N, H, W, C].net
decay: 滑動平均的衰減係數,通常取接近1的值,這樣能在驗證和測試集上得到較好結果
center: 中心偏移量,上述的ββ ,爲True,則自動添加,不然忽略
scale: 縮放係數,上述的γγ,爲True,則自動添加,不然忽略
epsilon: 爲防止除0而加的一個很小的數
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