训练多个 keras 模型并组合输出以确定损失

数据挖掘 喀拉斯 时间序列 lstm 自动编码器
2022-03-15 02:09:07

我正在尝试使用 Keras 中的深度学习设置来预测一维行波(正方形、三角形和锯齿波)的未来状态。这些波在 1024 个数据点中被离散化。由于这为 RNN 提供了相当高的输入维数,因此使用卷积自动编码器设置将 1024 个输入减少到 10 维的低维潜在空间。给 RNN 5 个前一个时间步的潜在输入来预测下一个时间步。我已经分别训练了自动编码器和 RNN,并获得了相当不错的结果,但理想情况下可以改进。下图举例说明了我是如何以解耦的方式训练模型的。

解耦训练方案

我的想法是通过耦合训练过程来改进这个模型。在这里,自动编码器的训练损失与 RNN 相同。下图给出了我想要实现的目标。

耦合训练方案

我希望潜在空间更适合使用此设置进行时间预测,因为自动编码器会因创建难以进行时间预测的潜在空间而受到惩罚。

我的问题是我不知道如何在 Keras 中以这种方式实现模型的组合。谁能帮我解决这个问题?

附言

我在以下链接中询问了有关此主题的另一个问题,该链接提供了我的项目的一些示例以及解耦的培训结果。

关于数据科学堆栈交换的其他问题

1个回答

在 keras 中,一个模型可以有多个输出,例如:

model = Model(inputs=[a1, a2], outputs=[b1, b2, b3])

Aand 如果您有多个输出,您可能会有多个损失,例如:

model.compile(loss=[loss1, loss2, loss3], optimizer='sgd')

通过这样做,当你训练和反向传播你的模型时,你正在使用所有的损失来训练你的模型,因为你正在最小化所有的损失。通过这种方式,您可以按照您的建议耦合您的两个模型。

此外 compile 具有参数 loss_weights ,您可以在其中更改不同损失的权重。