首页 > 编程知识 正文

lstm输入数据格式,LSTM的输入

时间:2023-05-03 15:40:36 阅读:43691 作者:4242

3359砖局域网. zhi Hu.com/p/139617364

为了更好地理解LSTM的结构,必须理解LSTM的数据输入状况。 如下图所示的是根据三通道图像,在添加时间轴的多样本多特征的不同时间的数据立方体。

三维数据立方体

右图是XG boost、lightGBM和决策树等常用模型的输入。 所有输入的数据格式都是此(n ) f )的矩阵,左边是添加时间轴的数据立方体(时间轴上的切片,其维是(n ) t ) f ),第一维是采样数,第二维是时间,第三维

这样的数据立方体有很多。 例如,天气预报数据将样本理解为城市,时间轴是日期,特征是与天气相关的降雨风速PM2.5等,该数据立方体可以很好地理解。 在NLP中,一个语句由embedding矩阵。 单词和单词的顺序是时间轴t,索引多个语句的嵌入式三维矩阵如下图所示。

在pytorch中定义的LSTM模型在pytorch中定义的LSTM模型的参数如下

classtorch.nn.lstm(*Args,**kwargs )参数是input_size:x的特征维hidden_size :隐藏层的特征维num_layers:lstm隐藏层默认值为True batch_first:True,则输入/输出数据格式为batch、seq、feature]dropout。 除最后一层外,每个层的输出都将进行ddopout

)1) input_size:x的特征维是数据立方体的f,在NLP中,单词是嵌入之后的向量长度,如下图所示。

)2) hidden_size )隐藏层的特征维数(隐藏层神经元数),如下图所示有2个隐藏层,每个隐藏层的特征维数为5。非双向LSTM的输出维度等于隐藏层的特征维度

)3) num_layers:lstm隐藏层的层数,上图定义了两个隐藏层。

)4) batch_first )用于定义输入/输出维。 稍后说明。

)5) bidirectional )是否双向循环神经网络是双向循环神经网络,如下图所示,使用双向LSTM时需特别注意。 正向传播的情况下(Ht,Ct ),反向传播也有) Ht ',Ct '。 如上所述,非双向LSTM的输出维度与隐藏层的特征维度相等

赋予LSTM的数据格式pytorch的LSTM输入数据格式默认为:

input(seq_len,batch,input_size )参数是seq_Len序列长度,在NLP中是语句的长度,一般用pad_sequence来补充长度batch

input(batch,seq_len,input_size )正好交换前面两个参数的位置。 其实这是一种比较容易理解的数据格式,下面将介绍如何在NLP中的嵌入式向量中构建LSTM输入。

前面的嵌入式矩阵如下图所示。

首先考虑batch,三维矩阵的形状如下。

转换过程如下图所示。

明白了吗? 这就是输入数据的格式。 很简单吗?

LTM的另外两个输入是双向LSTM的输出维度是隐含层特征数*2,而且H,C的维度是时间轴长度*2。h0,可以理解为网络的初始化参数并通过随机数生成。

h0(num_Layers*num_directions,batch,hidden_size ) C0 ) num_Layers*num_directions,batch,hidden _ sirens 如果定义的input格式如下:

input(Batch、seq_len、input_size )还会更改h和c的格式。

h0(BATC,num_layers * num_directions,h,hidden_size ) C0 ) bat

c,num_layers * num_directions, h, hidden_size)

 

LSTM的output格式

LSTM的输出是一个tuple,如下:

output,(ht, ct) = net(input) output: 最后一个状态的隐藏层的神经元输出 ht:最后一个状态的隐含层的状态值 ct:最后一个状态的隐含层的遗忘门值

output的默认维度是:

output(seq_len, batch, hidden_size * num_directions)ht(num_layers * num_directions, batch, hidden_size)ct(num_layers * num_directions, batch, hidden_size)

和input的情况类似,如果我们前面定义的input格式是:

input(batch, seq_len, input_size)

htct的格式也是要变的:

ht(batc,num_layers * num_directions, h, hidden_size)ct(batc,num_layers * num_directions, h, hidden_size)

说了这么多,我们回过头来看看ht和ct在哪里,请看下图:

output在哪里?请看下图:

 

LSTM和其他网络组合

还记得吗,output的维度等于隐藏层神经元的个数,即hidden_size,在一些时间序列的预测中,会在output后,接上一个全连接层,全连接层的输入维度等于LSTM的hidden_size,之后的网络处理就和BP网络相同了,如下图:

用pytorch实现上面的结构:

import torchfrom torch import nnclass RegLSTM(nn.Module): def __init__(self): super(RegLSTM, self).__init__() # 定义LSTM self.rnn = nn.LSTM(input_size, hidden_size, hidden_num_layers) # 定义回归层网络,输入的特征维度等于LSTM的输出,输出维度为1 self.reg = nn.Sequential( nn.Linear(hidden_size, 1) ) def forward(self, x): x, (ht,ct) = self.rnn(x) seq_len, batch_size, hidden_size= x.shape x = y.view(-1, hidden_size) x = self.reg(x) x = x.view(seq_len, batch_size, -1) return x

当然,有些模型则是将输出当做另一个LSTM的输入,或者使用隐藏层ht,ct的信息进行建模,不一而足。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。