【tensorflow】全连接层函数tf.layers.dense()原理
TensorFlow全連接層函數tf.layers.dense()原理 - jian shu https://www.jianshu.com/p/3855908b4c29
最近在用TensorFlow實現CNN網絡時用到了全連接層,在網上看了很多有關全連接層實現的代碼,發現相當一部分人都還是傾向于自己構造權重矩陣W和偏移矩陣b,利用矩陣乘法實現全連接層。
而TensorFlow中封裝了全連接層函數tf.layers.dense(),但是官方文檔中并沒有解釋其詳細原理。網上有部分博客對此提及,但也少有涉及到內部實現原理的。于是今天自己動手做了個對比試驗,來探究一下tf.layers.dense()函數的詳細原理。
先貼結論:tf.layers.dense( input, units=k )會在內部自動生成一個權矩陣kernel和偏移項bias,
各變量具體尺寸如下:對于尺寸為**[m, n]的二維張量input輸入時,
tf.layers.dense()會生成:
尺寸為[n, k]的 權矩陣kernel,
尺寸為[m, k]**的 偏移項bias。
內部的 “計算過程” 為 y = input * kernel + bias,
輸出值y 的維度為 [m, k]。
以下是實驗代碼。
import tensorflow as tf# 1. 調用tf.layers.dense計算 input = tf.reshape(tf.constant([[1., 2.], [2., 3.]]), shape=[4, 1]) b1 = tf.layers.dense(input,units=2,kernel_initializer=tf.constant_initializer(value=2), # shape: [1,2]bias_initializer=tf.constant_initializer(value=1)) # shape: [4,2]# 2. 采用矩陣相乘的方式計算 kernel = tf.reshape(tf.constant([2., 2.]), shape=[1, 2]) bias = tf.reshape(tf.constant([1., 1., 1., 1., 1., 1., 1., 1.]), shape=[4, 2]) b2 = tf.add(tf.matmul(input, kernel), bias)with tf.Session()as sess:sess.run(tf.global_variables_initializer())print(sess.run(b1))print(sess.run(b2))計算的結果如圖所示,兩種方法得到的結果相同。
——————————————————————
以上為轉載他人博客
——————————————————————
tf.layers.dense()參數及其含義:
tf.layers.dense用于添加一個全連接層。
函數如下:
參數的詳細解釋見如下網址:
TensorFlow函數:tf.layers.Dense_w3cschool https://www.w3cschool.cn/tensorflow_python/tensorflow_python-rn6a2tps.html
參數:
- units:整數或長整數,輸出空間的維數.
- activation:激活功能(可調用),將其設置為“None”以保持線性激活.
- use_bias:Boolean,表示該層是否使用偏差.
- kernel_initializer:權重矩陣的初始化函數;如果為None(默認),則使用tf.get_variable使用的默認初始化程序初始化權重.
- bias_initializer:偏置的初始化函數.
- kernel_regularizer:權重矩陣的正則化函數.
- bias_regularizer:正規函數的偏差.
- activity_regularizer:輸出的正則化函數.
- kernel_constraint:由Optimizer更新后應用于內核的可選投影函數(例如,用于實現層權重的范數約束或值約束).該函數必須將未投影的變量作為輸入,并且必須返回投影變量(必須具有相同的形狀).在進行異步分布式訓練時,使用約束是不安全的.
- bias_constraint:由Optimizer更新后應用于偏置的可選投影函數.
- trainable:Boolean,如果為True,還將變量添加到圖集合GraphKeys.TRAINABLE_VARIABLES中(請參閱參考資料tf.Variable).
- name:String,圖層的名稱;具有相同名稱的圖層將共享權重,但為了避免錯誤,在這種情況下,我們需要reuse=True.
- reuse:Boolean,是否以同一名稱重用前一層的權重.
總結
以上是生活随笔為你收集整理的【tensorflow】全连接层函数tf.layers.dense()原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做什么生意最赚钱 可以尝试这几种
- 下一篇: 【tensorflow】tf.layer