[英]Why does the accuracy of my convolutional neural network increase after removing the fully connected layer before the final softmax layer?
[英]How to implement a neural network with a not-fully-connected layer as the final layer?
我想實現一個帶有輸入層、兩個密集隱藏層和一個非密集 output 層的神經網絡。 下圖顯示了一個玩具示例。 第一個隱藏層有三個神經元,第二個和最后四個神經元,但第二個和第三個之間只有四個連接。
我想使用 Keras functional API。我該如何實現呢? 我應該手動將丟失的重量設置為 0 嗎? 我會開始如下:
input=keras.layers.Input(...)
hidden1=keras.layers.Dense(3, activation="..")(input)
hidden2=keras.layers.Dense(3, activation="..")(hidden1)
但后來我不知道如何進行。
最后一層實際上是兩個獨立的Dense
層,每個層有 2 個神經元並連接到前一層的不同神經元。 因此,您可以簡單地將倒數第二層的神經元分開,並將其傳遞給兩個不同的層:
input = keras.layers.Input(shape=(3,))
hidden1 = keras.layers.Dense(3)(input)
hidden2 = keras.layers.Dense(2)(hidden1)
hidden2_n1 = keras.layers.Lambda(lambda x: x[:,0:1])(hidden2) # take the first neuron
hidden2_n2 = keras.layers.Lambda(lambda x: x[:,1:])(hidden2) # take the second neuron
output1 = keras.layers.Dense(2)(hidden2_n1)
output2 = keras.layers.Dense(2)(hidden2_n2)
output = keras.layers.concatenate([output1, output2]) # optional: concatenate the layers to have a single output layer
model = keras.models.Model(input, output)
在tf.keras
或更新版本的keras
中Lambda
您可以簡單地編寫:
output1 = keras.layers.Dense(2)(hidden2[:,0:1])
output2 = keras.layers.Dense(2)(hidden2[:,1:])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.