Deep learning 在分段输入上实现RNN/LSTM

Deep learning 在分段输入上实现RNN/LSTM,deep-learning,lstm,rnn,Deep Learning,Lstm,Rnn,我正在设计一个深度学习模型,用于对长度为m2的输入进行分类,并考虑以下多层LSTM模型: 图像(没有足够的代表发布图像): 请注意,LSTM分别为m2对m2和m2对1。但是,m2较大,使得LSTM容易发生梯度消失/爆炸。我考虑将输入拆分为大小为m的段,允许LSTM为m-to-one而不是m2-to-one: 图片: 如何在Tensorflow或Keras中实现这一点?我找不到任何关于LSTM接受每个输入样本多个段的文档 有没有比我提出的更好的模型来处理可分段的长序列输入 您如何在Tensor

我正在设计一个深度学习模型,用于对长度为m2的输入进行分类,并考虑以下多层LSTM模型:

图像(没有足够的代表发布图像):

请注意,LSTM分别为m2对m2和m2对1。但是,m2较大,使得LSTM容易发生梯度消失/爆炸。我考虑将输入拆分为大小为m的段,允许LSTM为m-to-one而不是m2-to-one:

图片:

  • 如何在Tensorflow或Keras中实现这一点?我找不到任何关于LSTM接受每个输入样本多个段的文档
  • 有没有比我提出的更好的模型来处理可分段的长序列输入
      • 您如何在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的宽度。然后您可以
        densed()
        sigmoid
        来获得二进制分类,或者执行任何任务

      • 对于处理可分段的长序列输入,是否有比我提出的模型更好的模型?只有你知道你的数据,只有你才能决定。但在我看来,你的建议(1)已经很重要了。最好从琐碎的基线开始,了解您可以期望什么。(2)您的提案以
        m
        的倍数引入数据中断。只有您知道数据,但这会人为地限制第一个LSTM可能从数据中挖掘的模式数量

      如果这是我的问题(现在我真的在排斥任何与数据相关的想法),我会:

    • LSTM.当然会受到渐变消失的影响,但可以通过渐变剪裁来缓解爆炸。它非常简单,可以在线应用
    • bi LSTM。为了获得更好的表示,特别是序列的初始部分,您牺牲了在线处理。这将有助于您的模型变得更加准确,并有助于您更好地了解任务的重要性
    • >强>添加平均池。通过LSTM输出的平均池(而不是只取最后一个),有效地为每个时间步提供目标信息,这再次有助于挖掘有用的模式,此时从中间的某个地方,那些可怜的gyus没有通过向前或向后的LSTM
    • 1-d卷积。一旦你有了平均池,你就可以在技术上用任何本地架构(如1-d CNN)取代LSTM。这可能没有帮助,这取决于您的数据和其中有用信息的范围。不管怎么说,CNN通常更容易训练a,因为它有很好的并行化特性,所以在训练和测试阶段都有很大的加速
      • 您如何在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的宽度。然后您可以
        densed()
        sigmoid
        来获得二进制分类,或者执行任何任务

      • 对于处理可分段的长序列输入,是否有比我提出的模型更好的模型?只有你知道你的数据,只有你才能决定。但在我看来,你的建议(1)已经很重要了。最好从琐碎的基线开始,了解您可以期望什么。(2)您的提案以
        m
        的倍数引入数据中断。只有您知道数据,但这会人为地限制第一个LSTM可能从数据中挖掘的模式数量

      如果这是我的问题(现在我真的在排斥任何与数据相关的想法),我会:

    • LSTM.当然会受到渐变消失的影响,但可以通过渐变剪裁来缓解爆炸。它非常简单,可以在线应用
    • bi LSTM。为了获得更好的表示,特别是序列的初始部分,您牺牲了在线处理。这将有助于您的模型变得更加准确,并有助于您更好地了解任务的重要性
    • >强>添加平均池。通过LSTM输出的平均池(而不是只取最后一个),有效地为每个时间步提供目标信息,这再次有助于挖掘有用的模式,这一次从中间的某个地方,那些没有通过正向或反向LSTM的差的GUU。