我想为多任务深度学习任务设计一个神经网络。在 Keras API 中,我们可以使用“顺序”或“函数”方法来构建这样的神经网络。在下面,我提供了用于构建网络的代码,使用这两种方法构建具有两个输出的网络:
顺序的
seq_model = Sequential()
seq_model.add(LSTM(32, input_shape=(10,2)))
seq_model.add(Dense(8))
seq_model.add(Dense(2))
seq_model.summary()
Run Code Online (Sandbox Code Playgroud)
功能性
input1 = Input(shape=(10,2))
lay1 = LSTM(32, input_shape=(10,2))(input1)
lay2 = Dense(8)(lay1)
out1 = Dense(1)(lay2)
out2 = Dense(1)(lay2)
func_model = Model(inputs=input1, outputs=[out1, out2])
func_model.summary()
Run Code Online (Sandbox Code Playgroud)
当我查看模型的两个摘要输出时,每个输出都包含相同数量的可训练参数:
到目前为止,这看起来不错 - 但是当我绘制两个模型(使用keras.utils.plot_model)时,我开始怀疑自己,结果如下图:

我个人不知道如何解释这些。当使用多任务学习方法时,我希望输出层之前的层的所有神经元(在我的情况下为 8)连接到两个输出神经元。对我来说,这清楚地显示在 Functional API 中(我有两个Dense(1)实例),但这在 Sequential API 中不是很清楚。尽管如此,可训练参数的数量是相同的;这表明最后一层的 Sequential API 也完全连接到密集输出层中的两个神经元。
谁能向我解释这两个示例之间的差异,或者它们是否完全相同并导致相同的神经网络架构?另外,在这种情况下,哪个更受欢迎?
非常感谢您提前。
python functional-programming neural-network sequential keras