tensorflow 之常見模塊conv,bn...實現

       使用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會改變。函數

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爲例介紹裏面所包含的主要參數: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而加的一個很小的數

  • is_training: 是不是訓練過程,爲True則表明是訓練過程,那麼將根據decay用指數滑動平均求得moments,並累加保存到moving_meanmoving_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

tf.contrib.layers.batch_norm | TensorFlow

tf.layers.batch_normalization | TensorFlow

相關文章
相關標籤/搜索