16、全連接層


  • out = f(X@W + b)         線性轉換
  • out = relu(X@W + b)  非線性轉換

1、X@W + b

  h = relu(X@W + b),最后得到的值h00和h01是prob,比較prob的大小將樣本歸分為該類別。relu函數是將小於0的數等於0,大於0的數不變。通過全連接層網絡逐漸實現對輸入樣本的降維,如最初的輸入樣本是784維,而最終需要將樣本分為10類,所以需要將輸出設置為10維,即最終會將樣本降為10維,每一維是一個概率,通過比較10個概率的大小,選出最大的概率即可得到樣本的分類。

   

2、多層連接

  第一層稱為輸入層,中間的稱為隱藏層,最后的稱為輸出層,每一層包括該層與權值的乘積和加上偏置bais,全連接是指每一層的輸入和該層的每一個節點都有線條進行連接。

 

 

 

 3、全連接層代碼

(1)一層實現

  

1 #建立兩層的全連接層
2 x = tf.random.normal([4,784])
3 net = tf.keras.layers.Dense(512) #建立網路,第二層(輸出層)512
4 out = net(x)  #out結果直接使用全連接層模型實例化得到結果
5 print(out.shape) #(4, 512)
6 # 在模型中自動創建w(kernel)和b(bias)
7 print(net.kernel.shape)  #(784, 512)
8 print(net.bias.shape) #(512,)

使用net.build( )后自動創建w和b,此外build可以使用多次對輸入進行形狀的改變。一般來講只需要build一次,w和b就會創建。

1 net = tf.keras.layers.Dense(10)
2 # print(net.kernel.shape) #'Dense' object has no attribute 'kernel'
3 # 在聲明keras.layers.Dense時,並沒用完成w和b參數的創建,使用net.build輸入一個input_shape時會創建w和b
4 net.build(input_shape=[None,4])
5 print(net.kernel.shape, net.bias.shape) #(4, 10) (10,)

2)多層實現,通過容器Sequential([ layer1, layer1, layer1])實現模型的搭建和數據的前向流動。

  

 1 # 多層實現
 2 x = tf.random.normal([2,3])
 3 model = Sequential([       #設置每一層的大小
 4     layers.Dense(2,activation='relu'), 
 5     layers.Dense(2,activation='relu'),
 6     layers.Dense(2,)
 7 ])
 8 
 9 model.build(input_shape=[None,3])
10 model.summary()
11 
12 for p in model.trainable_variables: #trainable_variables返回一個list[w1,b1,w2,b2.w3.b3]
13     print(p.name, p.shape)

輸出:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                multiple                  8         
_________________________________________________________________
dense_1 (Dense)              multiple                  6         
_________________________________________________________________
dense_2 (Dense)              multiple                  6         
=================================================================
Total params: 20
Trainable params: 20
Non-trainable params: 0
_________________________________________________________________
dense/kernel:0 (3, 2)
dense/bias:0 (2,)
dense_1/kernel:0 (2, 2)
dense_1/bias:0 (2,)
dense_2/kernel:0 (2, 2)
dense_2/bias:0 (2,)


免責聲明!

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



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