我想实现一个带有输入层、两个密集隐藏层和一个非密集输出层的神经网络。下图显示了一个玩具示例。第一个隐藏层有三个神经元,第二个和最后四个神经元,但第二个和第三个之间只有四个连接。
我想使用 Keras 函数式 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:])
关于python - 如何实现一个以非全连接层作为最后一层的神经网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63675602/