关于torch.nn.LSTM()的输入和输出
主角torch.nn.LSTM()
初始化时要传入的参数
| Args:
| input_size: The number of expected features in the input `x`
| hidden_size: The number of features in the hidden state `h`
| num_layers: Number of recurrent layers. E.g., setting ``num_layers=2``
| would mean stacking two LSTMs together to form a `stacked LSTM`,
| with the second LSTM taking in outputs of the first LSTM and
| computing the final results. Default: 1
| bias: If ``False``, then the layer does not use bias weights `b_ih` and `b_hh`.
| Default: ``True``
| batch_first: If ``True``, then the input and output tensors are provided
| as `(batch, seq, feature)` instead of `(seq, batch, feature)`.
| Note that this does not apply to hidden or cell states. See the
| Inputs/Outputs sections below for details. Default: ``False``
| dropout: If non-zero, introduces a `Dropout` layer on the outputs of each
| LSTM layer except the last layer, with dropout probability equal to
| :attr:`dropout`. Default: 0
| bidirectional: If ``True``, becomes a bidirectional LSTM. Default: ``False``
| proj_size: If ``> 0``, will use LSTM with projections of corresponding size. Default: 0
input_size:一般是词嵌入的大小
hidden_size:隐含层的维度
num_layers:默认是1,单层LSTM
bias:是否使用bias
batch_first:默认为False,如果设置为True,则表示第一个维度表示的是batch_size
dropout:直接看英文吧
bidirectional:默认为False,表示单向LSTM,当设置为True,表示为双向LSTM,一般和num_layers配合使用(需要注意的是当该项设置为True时,将num_layers设置为1,表示由1个双向LSTM构成)
模型输入输出-单向LSTM
import torch
import torch.nn as nn
import numpy as np
inputs_numpy = np.random.random((64,32,300))
inputs = torch.from_numpy(inputs_numpy).to(torch.float32)
inputs.shape
torch.Size([64, 32, 300]):表示[batchsize, max_length, embedding_size]
hidden_size = 128
lstm = nn.LSTM(300, 128, batch_first=True, num_layers=1)
output, (hn, cn) = lstm(inputs)
print(output.shape)
print(hn.shape)
print(cn.shape)
torch.Size([64, 32, 128])
torch.Size([1, 64, 128])
torch.Size([1, 64, 128])
说明:
output:保存了每个时间步的输出,如果想要获取最后一个时间步的输出,则可以这么获取:output_last = output[:,-1,:]
h_n:包含的是句子的最后一个单词的隐藏状态,与句子的长度seq_length无关
c_n:包含的是句子的最后一个单词的细胞状态,与句子的长度seq_length无关
另外:最后一个时间步的输出等于最后一个隐含层的输出
output_last = output[:,-1,:]
hn_last = hn[-1]
print(output_last.eq(hn_last))

模型输入输出-双向LSTM
首先我们要明确:
output :(seq_len, batch, num_directions * hidden_size)
h_n:(num_layers * num_directions, batch, hidden_size)
c_n :(num_layers * num_directions, batch, hidden_size)
其中num_layers表示层数,这里是1,num_directions表示方向数,由于是双向的,这里是2,也是,我们就有下面的结果:
import torch
import torch.nn as nn
import numpy as np
inputs_numpy = np.random.random((64,32,300))
inputs = torch.from_numpy(inputs_numpy).to(torch.float32)
inputs.shape
hidden_size = 128
lstm = nn.LSTM(300, 128, batch_first=True, num_layers=1, bidirectional=True)
output, (hn, cn) = lstm(inputs)
print(output.shape)
print(hn.shape)
print(cn.shape)
torch.Size([64, 32, 256])
torch.Size([2, 64, 128])
torch.Size([2, 64, 128])
这里面的hn包含两个元素,一个是正向的隐含层输出,一个是方向的隐含层输出。
#获取反向的最后一个output
output_last_backward = output[:,0,-hidden_size:]
#获反向最后一层的hn
hn_last_backward = hn[-1]
#反向最后的output等于最后一层的hn
print(output_last_backward.eq(hn_last_backward))
#获取正向的最后一个output
output_last_forward = output[:,-1,:hidden_size]
#获取正向最后一层的hn
hn_last_forward = hn[-2]
# 反向最后的output等于最后一层的hn
print(output_last_forward.eq(hn_last_forward))

https://www.cnblogs.com/LiuXinyu12378/p/12322993.html
https://blog.csdn.net/m0_45478865/article/details/104455978
https://blog.csdn.net/foneone/article/details/104002372
关于torch.nn.LSTM()的输入和输出的更多相关文章
- torch.nn.LSTM()函数维度详解
123456789101112lstm=nn.LSTM(input_size, hidden_size, num_la ...
- PyTorch官方中文文档:torch.nn
torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...
- pytorch nn.LSTM()参数详解
输入数据格式:input(seq_len, batch, input_size)h0(num_layers * num_directions, batch, hidden_size)c0(num_la ...
- pytorch中文文档-torch.nn.init常用函数-待添加
参考:https://pytorch.org/docs/stable/nn.html torch.nn.init.constant_(tensor, val) 使用参数val的值填满输入tensor ...
- pytorch中文文档-torch.nn常用函数-待添加-明天继续
https://pytorch.org/docs/stable/nn.html 1)卷积层 class torch.nn.Conv2d(in_channels, out_channels, kerne ...
- torch.nn.functional中softmax的作用及其参数说明
参考:https://pytorch-cn.readthedocs.io/zh/latest/package_references/functional/#_1 class torch.nn.Soft ...
- torch.nn.Embedding理解
Pytorch官网的解释是:一个保存了固定字典和大小的简单查找表.这个模块常用来保存词嵌入和用下标检索它们.模块的输入是一个下标的列表,输出是对应的词嵌入. torch.nn.Embedding(nu ...
- pytorch torch.nn.functional实现插值和上采样
interpolate torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', ali ...
- pytorch torch.nn 实现上采样——nn.Upsample
Vision layers 1)Upsample CLASS torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align ...
随机推荐
- 使用kubeadm部署一套高可用k8s集群
使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...
- TVM自动调度器
TVM自动调度器 随着模型大小,算子多样性和硬件异构性的不断增长,优化深度神经网络的执行速度非常困难.从计算的角度来看,深度神经网络只是张量计算的一层又一层.这些张量计算(例如matmul和conv2 ...
- NVIDIA GPU的快速傅立叶变换
NVIDIA GPU的快速傅立叶变换 cuFFT库提供GPU加速的FFT实现,其执行速度比仅CPU的替代方案快10倍.cuFFT用于构建跨学科的商业和研究应用程序,例如深度学习,计算机视觉,计算物理, ...
- node和gulp版本的坑
现在node版本最新的稳定版在14+ 然后我在接手项目的时候使用gulp打包,怎么也打包不了,这个问题纠结了挺久,然后百度了下,发现版本的问题 node 12+ 以上的版本不兼容 gulp 3的版本 ...
- Hive窗口函数保姆级教程
在SQL中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时我们想要既显示聚集前的数据, ...
- 实验1、初入Flask
实验介绍 1. 实验内容 Flask是一个用Python编写的Web应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask.Flask基于Werk ...
- iNeuOS工业互联网平台,在高校教学实训领域的应用
目 录 1. 概述... 2 2. 实训柜... 2 3. 培训内容... 4 4. 二次开发培训... 5 1. 概述 中国工业互联网从 0 ...
- 透彻理解液晶显示模组LCD1602指令集与驱动编程(1)
LCD1602可以说是大多数单片机工程师了解液晶显示的入门级模组,其显示原理与其它很多显示模组也是相似的,今天我们就来详细讨论一下它的指令集.所谓模组的指令集,本质上是该模组使用的控制芯片的指令集,本 ...
- vivo商城促销系统架构设计与实践-概览篇
一.前言 随着商城业务渠道不断扩展,促销玩法不断增多,原商城v2.0架构已经无法满足不断增加的活动玩法,需要进行促销系统的独立建设,与商城解耦,提供纯粹的商城营销活动玩法支撑能力. 我们将分系列来介绍 ...
- 永恒之蓝MS17-010漏洞复现
永恒之蓝MS17-010漏洞复现 1.漏洞描述: 起因: 永恒之蓝(Eternalblue)是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包 ...