ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LSTM网络中各层解读

2021-05-28 18:03:05  阅读:629  来源: 互联网

标签:layer 各层 解读 shape print output LSTM out


https://towardsdatascience.com/reading-between-the-layers-lstm-network-7956ad192e58

 

构建深度神经网络最关键的部分之一是——当数据流经不同的层时,要对其有一个清晰的视图,这些层经历了维度的变化、形状的改变、扁平化和重新塑造……

 

 

 

 LSTM Network Architecture for Sentiment Analysis

每层解读:

0) 把单词变为tokens

1)embedding 把每个token变成特定大小的embedding

2)LSTM 由隐藏状态维度和层数决定

3)全连接层

4)激活函数

5)输出

 

数据:使用IMDB电影评论的数据集;

对数据进行了预处理,使得batch_size=50, 序列长度为200

1 dataiter = iter(train_loader)
2 x, y = dataiter.next()
3 x = x.type(torch.LongTensor)
4 print ('X is', x)
5 print ('Shape of X and y are :', x.shape, y.shape)

 

 

 

从X的形状可以看出,X是一个张量,为50行(=batch size)和200列(=sequence length)。

这个X将作为嵌入层的输入

  • Embedding layer :


使用torch.nn.Embedding模块作嵌入。它需要两个参数:词汇表大小和嵌入的维数

1 from torch import nn
2 vocab_size = len(words)
3 embedding_dim = 30
4 embeds = nn.Embedding(vocab_size, embedding_dim)
5 print ('Embedding layer is ', embeds)
6 print ('Embedding layer weights ', embeds.weight.shape)

 

 

 

1 embeds_out = embeds(x)
2 print ('Embedding layer output shape', embeds_out.shape)
3 print ('Embedding layer output ', embeds_out)

 

 

 

 从嵌入层的输出可以看出,它作为嵌入权值的结果创建了一个三维张量。现在它有50行,200列和30个嵌入维,也就是说,在我们的审查中,我们为每个标记化的单词添加了嵌入维。该数据现在将进入LSTM层

  • LSTM Layer :

在定义LSTM层时,我们保持Batch First = True和隐藏单元的数量= 512。

1 # initializing the hidden state to 0
2 hidden=None
3 lstm = nn.LSTM(input_size=embedding_dim, hidden_size=512, num_layers=1, batch_first=True)
4 lstm_out, h = lstm(embeds_out, hidden)
5 print ('LSTM layer output shape', lstm_out.shape)
6 print ('LSTM layer output ', lstm_out)

 

 

 通过查看LSTM层的输出,我们可以看到张量现在有50行,200列和512个LSTM节点。接下来,该数据被提取到全连接层

  • Fully Connected Layer :


对于全连通层,输入特征数= LSTM中隐藏单元数。输出大小= 1,因为我们只有二进制结果(1/0;正和负)

1 fc = nn.Linear(in_features=512, out_features=1)
2 fc_out = fc(lstm_out.contiguous().view(-1, 512))
3 print ('FC layer output shape', fc_out.shape)
4 print ('FC layer output ', fc_out)

注意,在将lstm输出放入fc层之前,必须将其压平。

1 fc = nn.Linear(in_features=512, out_features=1)
2 fc_out = fc(lstm_out.contiguous().view(-1, 512))
3 print ('FC layer output shape', fc_out.shape)
4 print ('FC layer output ', fc_out)

 

 

  • Sigmoid Activation Layer :


这只是为了将所有的输出值从完全连接的层转换为0到1之间的值

1 sigm = nn.Sigmoid()
2 sigm_out = sigm(fc_out)
3 print ('Sigmoid layer output shape', sigm_out.shape)
4 print ('Sigmoid layer output ', sigm_out)

 

 

  • Final Output :

这包括两个步骤:首先,重塑输出,使rows = batch大小

1 batch_size = x.shape[0]
2 out = sigm_out.view(batch_size, -1)
3 print ('Output layer output shape', out.shape)
4 print ('Output layer output ', out)

 

 第二,正如我们在网络体系结构中看到的那样——我们只希望在最后一个序列之后进行输出(在最后一个时间步之后)

 1 print ('Final sentiment prediction, ', out[:,-1]) 

 

 这些输出来自未经训练的网络,因此这些值可能还不表示任何内容。这只是为了说明,我们将使用这些知识来正确定义模型。

标签:layer,各层,解读,shape,print,output,LSTM,out
来源: https://www.cnblogs.com/xmd-home/p/14823337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有