wpt*_*orn 8 python functional-programming neural-network sequential keras
我想为多任务深度学习任务设计一个神经网络。在 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 也完全连接到密集输出层中的两个神经元。
谁能向我解释这两个示例之间的差异,或者它们是否完全相同并导致相同的神经网络架构?另外,在这种情况下,哪个更受欢迎?
非常感谢您提前。
Sequential 和 Functional keras API 的区别:
顺序 API 允许您为大多数问题逐层创建模型。它的局限性在于它不允许您创建共享层或具有多个输入或输出的模型。
函数式 API 允许您创建具有更大灵活性的模型,因为您可以轻松定义模型,其中层连接到的不仅仅是上一层和下一层。事实上,您可以将层连接到(字面上)任何其他层。因此,创建复杂的网络,如 siamese 网络和残差网络成为可能。
回答你的问题:
不,这些 API 是不一样的,并且层数相同是正常的。使用哪一种?这取决于您要使用此网络的用途。你培训是为了什么?你希望输出是什么?
我推荐这个链接来充分利用这个概念。
我希望我能帮助你更好地理解。
| 归档时间: |
|
| 查看次数: |
5746 次 |
| 最近记录: |