我正在设计一个深度学习模型,用于对长度为 m 2 的输入进行分类,并考虑到以下多层LSTM模型:
图片(发布图片的代表不足):https://i.imgur.com/rUsvu0a.png
注意LSTM分别是m 2 -to-m 2 和m 2 -to-one。然而, m 2 很大,使得LSTM容易受到梯度消失/爆炸的影响。我想把输入分成大小为 m 的段,允许LSTM是m-to-one而不是m 2 -to-one:
图片:https://i.imgur.com/WQXGGng.png
答案 0 :(得分:0)
您如何在Tensorflow或Keras中实现此目标?
通过反复重定。假设您的数据组织为[B, m^2]
。因此,您可以按照对[B, m, m ]
的建议进行重塑。然后,您通过重塑为B
,使B*m
明确,假装您的批处理不是由[B*m, m, 1]
个样本组成,而是1
个段,因为我大多数RNN实现可见(包括TF / Keras)每个时间步需要显式功能。您通过LSTM运行此命令并得到[B*m, k]
,其中k
是LSTM的宽度。现在,您可以重新调整为[B, m, k]
的形状,并可以通过另一个LSTM来运行它,接收到[B, j]
,其中j
是第二个LSTM的宽度。然后,您可以Dense()
和sigmoid
进行二进制分类或执行任何任务。
是否存在比我提出的模型更好的模型,可以处理可分段的长序列输入?只有知道数据,才能决定。但是从我的角度来看,您的建议是(1)已经不平凡了。最好从琐碎的基线开始,以了解您的期望。并且(2),您的提案会以m
的倍数引入数据中断。只有您知道数据,但是此IMHO人为地限制了您的第一个LSTM可以从数据中挖掘的模式数量。
如果这是我的问题(现在我真的在边缘化所有与数据相关的想法),我会这样做: