在 MLP 中处理可变输出单元?

数据挖掘 深度学习 喀拉斯
2022-03-13 19:19:17

我正在使用 Keras 来构建我的架构。

我试图解决的回归问题对于不同的训练样本有不同的输出。

假设我的前两行y_train = [[16, 3], [6], ... ]对应于我的前两行X_train (input data)我想将密集层单元的输出分配给这些y_train行的长度。

例如,对于第一个训练样本,我希望长度model.add(dense(2))y_train[0]2,对于第二个训练样本,我希望长度model.add(dense(1))y_train[0]1,依此类推。

我还认为我可以调用 Lambda 层而不是输出密集层,并且在该 Lambda 层中,我可以y_train使用 Lambda 层的 output_shape 参数包装每一行的长度并将其分配为输出单元。但是,我不知道如何y_train在模型的训练时访问我的模型,以便我可以使用y_train内部 lambda 层来实现这种情况。

有人可以帮我解决这个可变长度输出问题吗?

1个回答

如果您想使用任意长度的输入和输出,有两种常见的选择:为每个长度训练一个模型或使用循环神经网络 (RNN) 架构。非 RNN 神经网络无法处理任意长度,因为权重的形状取决于输入的长度。从您的示例中,您似乎希望根据长度保留不同的权重副本。你可以这样做,但从理论上讲,这与训练单独的模型相同。一个长度的权重只会由相同长度的输入更新,所以为什么不省去麻烦并拥有单独的模型呢?

尽管 RNN 通常用于自然语言处理和理解,但这并不意味着它们不能用于解决其他深度学习问题。特别针对您的问题,您应该使用多对多架构。

来源:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

来源: http: //karpathy.github.io/2015/05/21/rnn-effectiveness/

在 Keras 中,您可以使用 LSTM 层并将参数return_sequences设置为 True,这将返回与输入序列长度相同的输出。此处的文档:https ://keras.io/layers/recurrent/#lstm 。