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


       使用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_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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM