在 Pytorch 中实现有状态 LSTM/ConvLSTM 的最佳方式是啥?
Posted
技术标签:
【中文标题】在 Pytorch 中实现有状态 LSTM/ConvLSTM 的最佳方式是啥?【英文标题】:The best way to implement stateful LSTM/ConvLSTM in Pytorch?在 Pytorch 中实现有状态 LSTM/ConvLSTM 的最佳方式是什么? 【发布时间】:2021-07-02 21:04:54 【问题描述】:我正在尝试使用 ConvLSTM 来提高具有顺序信息的对象检测任务的性能。
典型的 ConvLSTM 模型采用形状为 (samples, time_steps, channels, rows, cols)
的 5D 张量作为输入。
as stated in this post,需要在 Pytorch ConvLSTM 层中将 500 张图像的长序列拆分成更小的片段。例如,它可以分成 10 个片段,每个片段有 50 个时间步。
我有两个目标:
我希望网络记住 10 个片段序列的状态。 IE。如何在片段之间传递隐藏状态?
我想一张一张地输入(视频的)图像。 IE。 500 张图像的长序列被分成 500 个片段,每个片段只有一张图像。输入应该类似于(all_samples, channels, rows, cols)
。这只有在 1.goal 能够实现的情况下才有意义。
我为 Tensorflow 找到了一些好的答案,但我正在使用 Pytorch。
TensorFlow: Remember LSTM state for next batch (stateful LSTM)
The best way to pass the LSTM state between batches
在 Pytorch 中实现有状态 LSTM/ConvLSTM 的最佳方式是什么?
【问题讨论】:
为什么不做一个 3d 卷积? 我认为只保存当前图像和隐藏状态可能比保存一堆图像更有效。因此,我不想在将它们输入 convLSTM 或 3d 卷积之前将它们连接起来,而是要一张一张地输入图像。 【参考方案1】:我发现this post 有一个很好的例子
model = nn.LSTM(input_size = 20, hidden_size = h_size)
out1, (h1,c1) = model(x1)
out2, (h2,c2) = model(x2, (h1,c1))
【讨论】:
以上是关于在 Pytorch 中实现有状态 LSTM/ConvLSTM 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Keras 模型中实现一些可训练的参数,例如 Pytorch 中的 nn.Parameters()?