Pytorch 函数nn.LSTM在批次/序列中的行为如何?

Pytorch 函数nn.LSTM在批次/序列中的行为如何?,pytorch,lstm,operation,sequence-modeling,Pytorch,Lstm,Operation,Sequence Modeling,我目前正在学习使用Pytork,不得不问这个函数是如何工作的 基本上,我正在尝试输入我的数据集矩阵(mxn)。 由于数据集是一个矩阵,所以我希望使用数据加载器(utils.data.dataset)将数据集递归地(作为时间步长)馈送到LSTM网络中 我感到困惑的是输入的大小(seq_len,batch,input_size) 假设我正在获取批处理大小为10的数据加载程序。 为了以正确的形式生成火车装载机,我必须将之前的大小(M x N)转换为包含序列长度的大小,序列长度可以简单地转换为(M/se

我目前正在学习使用Pytork,不得不问这个函数是如何工作的

基本上,我正在尝试输入我的数据集矩阵(mxn)。 由于数据集是一个矩阵,所以我希望使用数据加载器(utils.data.dataset)将数据集递归地(作为时间步长)馈送到LSTM网络中

我感到困惑的是输入的大小(seq_len,batch,input_size)

假设我正在获取批处理大小为10的数据加载程序。 为了以正确的形式生成火车装载机,我必须将之前的大小(M x N)转换为包含序列长度的大小,序列长度可以简单地转换为(M/seq_len,seq_len,N)

那么my nn.LSTM的输入大小如下: (M/序列号/批次号,序列号,N)

因此,我的主要问题是:
  • 如果我将此数据大小输入LSTM模型nn.LSTM(N,隐藏的大小), LSTM模型是否已经在整个批次中执行递归前馈

  • 我还对seq_len感到困惑,当seq_len>1时,输出将得到seq_len的维度。 这是否意味着输出包含序列的递归操作

  • 我不确定我是否把问题说清楚了,但我的理解变得相当混乱..哈哈 希望有人能帮助我组织正确的理解

  • 是的,前提是每个样本的序列长度相同(这里似乎就是这种情况)。如果没有,你必须用垫子

  • 是的,LSTM扩展到每个时间步,并且每个时间步都有输出。因此,您不必对每个元素单独应用它


  • 你能详细解释一下为什么要除以序列长度吗?这一部分目前还不清楚,但对答案来说非常关键,我相信我试图用我的数据集(特征(;行)模拟seq2seq LSTM网络的行为,用时间步长(;列)),用序列长度划分整个矩阵,并将这些序列与批量大小一样叠加。(在每一个火车装载机的例子中)我很抱歉收到了大量的通知……:(试图用正确的形式发表评论,但它不起作用。我会在得到正确的形式后一分钟发布。这很酷,最好是删除,而不是制造额外的噪音+我看到你是新来的,所以慢慢来。:)我很失望不能解决这个内联代码注释问题。哈哈,这两种方法会有相同的行为吗?
    对于in-range(self.seq_len):`out_seq=self.lstm(input[t]。view(1,1,-1),hidd)
    with hidd.shape=[1,batch_size,hidden_size]……和……
    out,hidd=self.lstm(input,hidd)
    使用hidd.shape=[seq_len,batch_size,hidden_size]是的,他们应该这样做。在第一种情况下,它仍然是
    out_seq,hidden=self.lstm(输入[t].view(1,1,-1),hidden)
    尽管我认为。你不应该这样使用它,第二种方法是正确的(如果正确的话,你几乎不必在
    pytorch中循环)。此外,
    self.lstm
    hidd
    )的第二个参数通常是不必要的,因为它隐式地用零填充,并且这个参数是可选的(在您的案例中,您可能不想碰它)。谢谢您的回复:)这类排序是在LSTM之后连接完全连接的层的下一个过程。但是,如果我想在几个时期内进行训练,我不需要在模块外返回“hidd”吗??