nn.LSTM(input_dim,hidden_dim,nums_layer,batch_first)

各参数理解:

  • input_dim:输入的张量维度,表示自变量特征数
  • hidden_dim:输出张量维度
  • bias:True or False 是否使用偏置
  • batch_first:True or False,nn.LSTM 接收的输入是(seq_len,batch_size,input_dim),将batch_first设置为True将输入变为(batch_size,seq_len,input_dim)
  • dropout:除了最后层外都引入随机失活
  • bidirectional:True or False 是否使用双向LSTM

举例:10000个句子,每个句子10个词,batch_size=10,embedding_size=300(input_dim)

此时各个参数为:

  • input_size=embedding_size=300
  • batch=batch_size=10
  • seq_len=10
  • 另外设置hidden_dim=128,num_layers=2
	import torch
import torch.nn as nn
from torch.autograd import Variable rnn = nn.LSTM(input_size=300,hidden_size=128,num_layers=2)
inputs = torch.randn(10,10,300)#输入(seq_len, batch_size, input_size) 序列长度为10 batch_size为10 输入维度为300
h_0 = torch.randn(2,10,128)#(num_layers * num_directions, batch, hidden_size) num_layers = 2 ,batch_size=10 ,hidden_size = 128,如果LSTM的bidirectional=True,num_directions=2,否则就是1,表示只有一个方
c_0 = torch.randn(2,10,128)#c_0和h_0的形状相同,它包含的是在当前这个batch_size中的每个句子的初始细胞状态。h_0,c_0如果不提供,那么默认是0
num_directions=1# 因为是单向LSTM #输出格式为(output,(h_n,c_n))
output,(h_n,c_n) = rnn(inputs,(h0,c0))#输入格式为lstm(input,(h_0, c_0))
print("out:", output.shape)
print("h_n:", h_n.shape)
print("c_n:", c_n.shape) 输出结果:
out: torch.Size([10, 10, 128])
h_n: torch.Size([2, 10, 128])
c_n: torch.Size([2, 10, 128])

输出结果:

  • output的shape为(seq_len=5,batch_size=3,num_directions*hidden_size),hidden_size为20,num_directions为1。它包含的LSTM的最后一层的输出特征(h_t),t是batch_size中每个句子的长度。
  • h_n.shape为(num_directions*num_layers=2,batch_size=3,hidden_size=20)
  • c_n.shape==h_n.shape
  • h_n是句子最后一个单词的隐藏状态,c_n包含句子最后一个单词的细胞状态,它们与句子长度无关
  • LSTM中的隐藏状态就是输出。

pytorch中LSTM各参数理解的更多相关文章

  1. [PyTorch]PyTorch中模型的参数初始化的几种方法(转)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本文目录 1. xavier初始化 2. kaiming初始化 3. 实际使用中看到的初始化 3.1 ResNeXt,de ...

  2. Pytorch中stack()方法的理解

    Torch.stack() 1. 概念 在一个新的维度上连接一个张量序列 2. 参数 tensors (sequence)需要连接的张量序列 dim (int)在第dim个维度上连接 注意输入的张量s ...

  3. CreateProcess中的部分参数理解

    函数原型,这里写Unicode版本 WINBASEAPIBOOLWINAPICreateProcessW( _In_opt_ LPCWSTR lpApplicationName, //可执行文件名字 ...

  4. pytorch 中LSTM模型获取最后一层的输出结果,单向或双向

    单向LSTM import torch.nn as nn import torch seq_len = 20 batch_size = 64 embedding_dim = 100 num_embed ...

  5. PyTorch中使用深度学习(CNN和LSTM)的自动图像标题

    介绍 深度学习现在是一个非常猖獗的领域 - 有如此多的应用程序日复一日地出现.深入了解深度学习的最佳方法是亲自动手.尽可能多地参与项目,并尝试自己完成.这将帮助您更深入地掌握主题,并帮助您成为更好的深 ...

  6. Pytorch中的自动求导函数backward()所需参数含义

    摘要:一个神经网络有N个样本,经过这个网络把N个样本分为M类,那么此时backward参数的维度应该是[N X M] 正常来说backward()函数是要传入参数的,一直没弄明白backward需要传 ...

  7. [转载]Pytorch中nn.Linear module的理解

    [转载]Pytorch中nn.Linear module的理解 本文转载并援引全文纯粹是为了构建和分类自己的知识,方便自己未来的查找,没啥其他意思. 这个模块要实现的公式是:y=xAT+*b 来源:h ...

  8. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  9. 关于vue自定义事件中,传递参数的一点理解

    例如有如下场景 先熟悉一下Vue事件处理 <!-- 父组件 --> <template> <div> <!--我们想在这个dealName的方法中传递额外参数 ...

  10. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

随机推荐

  1. .Net Core MemoryCache 缓存

    缓存是一种开发时常用的性能优化手段,.Net自带内存缓存(MemoryCache)可以很方便的使用,下面列出简单用法. 首先通过NuGet添加 Microsoft.Extensions.Hosting ...

  2. Springboot层级关系以及作用

    entity entity是实体层,与model,pojo相似,是存放实体的类,类中定义了多个类属性,并且与数据库表的字段保持一致,一张表对应了一个entity类.主要用于定于与数据库对象对应的属性, ...

  3. 关于使用c++制作蓝牙连接,Windows版本

    1 #define _CRT_SECURE_NO_WARNINGS 2 #pragma warning(disable : 4995) 3 #include <iostream> 4 #i ...

  4. SQL Server 清除一个数据库下所有表数据,保留表结构

    用法:在需要清空数据的数据库创建并执行存储过程,该存储过程并不会影响其他数据库 请小心使用这些脚本,确保在生产环境之前备份您的数据库.️ 存储过程: CREATE PROCEDURE ClearAll ...

  5. static个人理解

    static解:主要用于内存管理,static关键字的方法不需要new对象就可以直接在同static内进行调用,在其他类中可直接通过类名进行变量的访问.static关键字属于类,不是类的实例.成员分为 ...

  6. ansible 部署hadoop

    规划 ansible 节点 ansible controller 镜像rhel 8.2 镜像ansible hadoop 集群 master slave1 slave2 镜像centos 1810 0 ...

  7. NVIDIA机器人仿真环境 —— NVIDIA Isaac Sim 的headless模式/无头模式 —— 非桌面模式、非可视化模式

    相关: https://developer.nvidia.com/isaac-sim 可视化模式,也就是在桌面系统上直接安装软件,具体地址: https://developer.nvidia.com/ ...

  8. 强化学习中经验池的替代设计——A3C算法

    读论文<Asynchronous methods for deep reinforcement learning>有感 ---------------------------------- ...

  9. MindSpore 初探, 使用LeNet训练minist数据集

    如题所述,官网地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/quick_start.html 数据集下载: mkdir -p ./datasets/ ...

  10. AQS源码解读之ReentrantLock-图解

    1.背景 1.AQS简介AQS全称为AbstractQueuedSynchronizer(抽象队列同步器).AQS是一个用来构建锁和其他同步组件的基础框架,使用AQS可以简单且高效地构造出应用广泛的同 ...