python - 如何实现一个以非全连接层作为最后一层的神经网络?

标签 python tensorflow keras neural-network tf.keras

我想实现一个带有输入层、两个密集隐藏层和一个非密集输出层的神经网络。下图显示了一个玩具示例。第一个隐藏层有三个神经元,第二个和最后四个神经元,但第二个和第三个之间只有四个连接。
Network architecture
我想使用 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/

相关文章:

python - 加载模型时没有 GPU 的机器上的 Cuda 驱动程序错误

r - 应用多个类别进行预测时出现 Keras 错误

python - 为什么我的 keras LSTM 模型会陷入无限循环?

Python Flask 应用程序抛出 RuntimeError : working outside of request context

python - 从 Python C API 获取回溯

Python:没有名为 'dash.development' 的模块。 'dash' 不是包

python - Tensorflow v1.14 中内核约束的使用

python-3.x - Tensorflow:使用序列设置数组元素

tensorflow - keras 以不同的学习率恢复训练

C# 相当于 Python 中的 "value error"