LSMT层

可以在troch.nn模块中找到LSTM类

lstm = torch.nn.LSTM(*paramsters)

1、__init__方法

首先对nn.LSTM类进行实例化,需要传入的参数如下图所示:

一般我们关注这4个:

  • input_size表示输入的每个token的维度,也可以理解为一个word的embedding的维度。
  • hidden_size表示隐藏层也就是记忆单元C的维度,也可以理解为要将一个word的embedding维度转变成另一个大小的维度。除了C,在LSTM中输出的H的维度与C的维度是一致的。
  • num_layers表示有多少层LSTM,加深网络的深度,这个参数对LSTM的输出的维度是有影响的(后文会提到)。
  • bidirectional表示是否需要双向LSTM,这个参数也会对后面的输出有影响。

2、forward方法的输入

将数据input传入forward方法进行前向传播时有3个参数可以输入,见下图:

  • 这里要注意的是input参数各个维度的意义,一般来说如果不在实例化时制定batch_first=True,那么input的第一个维度是输入句子的长度seq_len,第二个维度是批量的大小,第三个维度是输入句子的embedding维度也就是input_size,这个参数要与__init__方法中的第一个参数对应。
  • 另外记忆细胞中的两个参数h_0c_0可以选择自己初始化传入也可以不传,系统默认是都初始化为0。传入的话注意维度[bidirectional * num_layers, batch_size, hidden_size]。

3、forward方法的输出

forward方法的输出如下图所示:

一般采用如下形式:

out,(h_n, c_n) = lstm(x)

out表示在最后一层上,每一个时间步的输出,也就是句子有多长,这个out的输出就有多长;其维度为[seq_len, batch_size, hidden_size * bidirectional]。因为如果的双向LSTM,最后一层的输出会把正向的和反向的进行拼接,故需要hidden_size * bidirectional。h_n表示的是每一层(双向算两层)在最后一个时间步上的输出;其维度为[bidirectional * num_layers, batch_size, hidden_size]
假设是双向的LSTM,且是3层LSTM,双向每个方向算一层,两个方向的组合起来叫一层LSTM,故共会有6层(3个正向,3个反向)。所以h_n是每层的输出,bidirectional * num_layers = 6。c_n表示的是每一层(双向算两层)在最后一个时间步上的记忆单元,意义不同,但是其余均与 h_n一样。

LSTMCell

可以在troch.nn模块中找到LSTMCell类

lstm = torch.nn.LSTMCell(*paramsters)

它的__init__方法的参数设置与LSTM类似,但是没有num_layers参数,因为这就是一个细胞单元,谈不上多少层和是否双向。
forward输入和输出与LSTM均有所不同:

其相比LSTM,输入没有了时间步的概念,因为只有一个Cell单元;输出 也没有out参数,因为就一个Cell,out就是h_1h_1c_1也因为只有一个Cell单元,其没有层数上的意义,故只是一个Cell的输出的维度[batch_size, hidden_size].

代码演示如下:

rnn = nn.LSTMCell(10, 20) # (input_size, hidden_size)
input = torch.randn(2, 3, 10) # (time_steps, batch, input_size)
hx = torch.randn(3, 20) # (batch, hidden_size)
cx = torch.randn(3, 20)
output = []
# 从输入的第一个维度也就是seq_len上遍历,每循环一次,输入一个单词
for i in range(input.size()[0]):
		# 更新细胞记忆单元
        hx, cx = rnn(input[i], (hx, cx))
        # 将每个word作为输入的输出存起来,相当于LSTM中的out
        output.append(hx)
output = torch.stack(output, dim=0)

到此这篇关于pytorch中使用LSTM详细解说的文章就介绍到这了,更多相关pytorch使用LSTM内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

pytorch中使用LSTM详解的更多相关文章

  1. 如何在PHP环境中使用ProtoBuf数据格式

    这篇文章主要介绍了如何在PHP环境中使用ProtoBuf数据格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  2. 使用sockets:从新闻组中获取文章(三)

    >我们从服务器的这个新闻组中读取了最后的十篇文章,。也可以通过使用HEAD命令读取文章的头信息,或者使用BODY命令读取文章内容。>关于fclose()的更多信息,请参考http://www.php.net/manual/function.fclose.php结论在上文中,我们看到了怎样打开、使用然后关闭一个socket:连接到一个NNTP服务器,取回一些文章。使用POST命令发表文章也复杂不到哪儿去。下一步就是编写一个基于WEB的新闻组客户端了。这样,你有了一个基于web的搜索新闻组的程序了。

  3. JavaScript中Webpack的使用教程

    Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源,这篇文章主要介绍了JavaScript中Webpack的使用,需要的朋友可以参考下

  4. vue3中$attrs的变化与inheritAttrs的使用详解

    $attrs现在包括class和style属性。 也就是说在vue3中$listeners不存在了,vue2中$listeners是单独存在的,在vue3 $attrs包括class和style属性, vue2中 $attrs 不包含class和style属性,这篇文章主要介绍了vue3中$attrs的变化与inheritAttrs的使用 ,需要的朋友可以参考下

  5. PHP中GET变量的使用

    自PHP4.1.0以后将HTTP_GET_VARS使用GET变量来保存,GET的变量主要来自以下的方法对服务器以获取资料信息为请求方法的例如,URL,使用FORM的METHOD为GET方式。这样所有的请求变量将通过URL传递给服务器,服务器根据配置调用相关的解释器来处理这些GET出来的变量。arg_separator.input=";,"————二、自己编写解释语法list=$_GET;//将GET变量分解出来$tmp=explode;//将数据分出这个用法的优点在于,别人无法知道您传递的值是被谁使用,您

  6. Python数据分析 Numpy 的使用方法

    这篇文章主要介绍了Python数据分析 Numpy 的使用方法,Numpy 是一个Python扩展库,专门做科学计算,也是大部分Python科学计算库的基础,关于其的使用方法,需要的小伙伴可以参考下面文章内容

  7. 关于@RequestLine的使用及配置

    这篇文章主要介绍了关于@RequestLine的使用及配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  8. Flask-Sqlalchemy的基本使用详解

    本文主要介绍了Flask-Sqlalchemy的基本使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. IOS之UIWebView的使用(基本知识)

    在Android开发中有WebView作为混合模式开发的桥梁,当然在IOS中也同样有一个 UIWebView 组件来作为混合模式开发的桥梁,那么下面就对UIWebView的一些基本知识详解一下

  10. 详解Android中AIDL的使用

    AIDL是Android Interface definition language的缩写,对于小白来说,AIDL的作用是让你可以在自己的APP里绑定一个其他APP的service,这样你的APP可以和其他APP交互,接下来通过本文给大家分享Android AIDL使用,需要的朋友参考下吧

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部