小编wpt*_*orn的帖子

用于多任务学习神经网络的 Keras 的顺序与功能 API

我想为多任务深度学习任务设计一个神经网络。在 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)

当我查看模型的两个摘要输出时,每个输出都包含相同数量的可训练参数:

顺序和功能 .summary()

到目前为止,这看起来不错 - 但是当我绘制两个模型(使用keras.utils.plot_model)时,我开始怀疑自己,结果如下图: 顺序和功能 plot_model()

我个人不知道如何解释这些。当使用多任务学习方法时,我希望输出层之前的层的所有神经元(在我的情况下为 8)连接到两个输出神经元。对我来说,这清楚地显示在 Functional API 中(我有两个Dense(1)实例),但这在 Sequential API 中不是很清楚。尽管如此,可训练参数的数量是相同的;这表明最后一层的 Sequential API 也完全连接到密集输出层中的两个神经元。

谁能向我解释这两个示例之间的差异,或者它们是否完全相同并导致相同的神经网络架构?另外,在这种情况下,哪个更受欢迎?

非常感谢您提前。

python functional-programming neural-network sequential keras

8
推荐指数
1
解决办法
5746
查看次数