我想为多任务深度学习任务设计一个神经网络。在 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()
功能性
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()
当我查看模型的两个摘要输出时,每个模型都包含相同数量的可训练参数:
![Sequential and Functional .summary()](https://i.stack.imgur.com/gh3SJ.png)
Up until now, this looks fine - however I start doubting myself when I plot both models (using keras.utils.plot_model
) which results in the followings graphs:
![Sequential and Functional plot_model()](https://i.stack.imgur.com/WCess.png)
我个人不知道如何解释这些。当使用多任务学习方法时,我希望输出层之前的层的所有神经元(在我的例子中是 8 个)连接到both输出神经元。对我来说,这清楚地显示在功能 API 中(我有两个Dense(1)
实例),但是从 Sequential API 来看这一点还不是很清楚。尽管如此,可训练参数的数量是相同的;这表明 Sequential API 最后一层也完全连接到密集输出层中的两个神经元。
有人可以向我解释这两个示例之间的差异,或者它们是否完全相同并产生相同的神经网络架构?另外,在这种情况下,哪一个会是首选?
预先非常感谢您。