文档章节

PyTorch快速入门教程五(rnn)

earnpls
 earnpls
发布于 2017/07/02 09:16
字数 1354
阅读 86
收藏 0
点赞 0
评论 0

上一讲讲了cnn以及如何使用pytorch实现简单的多层卷积神经网络,下面我们将进入rnn,关于rnn将分成三个部分,

  1. 介绍rnn的基本结构以及在pytorch里面api的各个参数所表示的含义,
  2. 介绍rnn如何在MNIST数据集上做分类,
  3. 涉及一点点自然语言处理的东西。

RNN

首先介绍一下什么是rnnrnn特别擅长处理序列类型的数据,因为他是一个循环的结构

pytorch Rnn

一个序列的数据依次进入网络A,网络A循环的往后传递。

这就是RNN的基本结构类型。而最早的RNN模型,序列依次进入网络中,之前进入序列的数据会保存信息而对后面的数据产生影响,所以RNN有着记忆的特性,而同时越前面的数据进入序列的时间越早,所以对后面的数据的影响也就越弱,简而言之就是一个数据会更大程度受到其临近数据的影响。但是我们很有可能需要更长时间之前的信息,而这个能力传统的RNN特别弱,于是有了LSTM这个变体。

LSTM

pytorch LSTM

这就是LSTM的模型结构,也是一个向后传递的链式模型,而现在广泛使用的RNN其实就是LSTM,序列中每个数据传入LSTM可以得到两个输出,而这两个输出和序列中下一个数据一起又作为传入LSTM的输入,然后不断地循环向后,直到序列结束。

下面结合pytorch一步一步来看数据传入LSTM是怎么运算的

首先需要定义好LSTM网络,需要nn.LSTM(),首先介绍一下这个函数里面的参数

  1. input_size 表示的是输入的数据维数

  2. hidden_size 表示的是输出维数

  3. num_layers 表示堆叠几层的LSTM,默认是1

  4. bias True 或者 False,决定是否使用bias

  5. batch_first True 或者 False,因为nn.lstm()接受的数据输入是(序列长度,batch,输入维数),这和我们cnn输入的方式不太一致,所以使用batch_first,我们可以将输入变成(batch,序列长度,输入维数)

  6. dropout 表示除了最后一层之外都引入一个dropout

  7. bidirectional 表示双向LSTM,也就是序列从左往右算一次,从右往左又算一次,这样就可以两倍的输出

是网络的输出维数,比如M,因为输出的维度是M,权重w的维数就是(M, M)和(M, K),b的维数就是(M, 1)和(M, 1),最后经过sigmoid激活函数,得到的f的维数是(M, 1)。 pytorch bidirectional

对于第一个数据,需要定义初始的h_0和c_0,所以nn.lstm()的输入Inputs:input, (h_0, c_0),表示输入的数据以及h_0和c_0,这个可以自己定义,如果不定义,默认就是0

pytorch

第二步也是差不多的操作,只不多是另外两个权重加上不同的激活函数,一个使用的是sigmoid,一个使用的是tanh,得到的输出i_t和\tilde{C}_t都是(M, 1)。

pytorch

接着这个乘法是矩阵每个位置对应相乘,然后将两个矩阵加起来,得到的输出C_t是(M, 1)。

pytorch 最后一步得到的o_t也是(M, 1),然后C_t经过激活函数tanh,再和o_t每个位置相乘,得到的输出h_t也是(M, 1)。

最后得到的输出就是h_t和C_t,维数分别都是(M, 1),而输入x_t 维数都是(K, 1)。

lstm = nn.LSTM(10, 30, batch_first=True)

可以通过这样定义一个一层的LSTM输入是10,输出是30

lstm.weight_hh_l0.size()
lstm.weight_ih_l0.size()
lstm.bias_hh_l0.size()
lstm.bias__ih_l0.size()

可以分别得到权重的维数,注意之前我们定义的4个weights被整合到了一起,比如这个lstm,输入是10维,输出是30维,相对应的weight就是30x10,这样的权重有4个,然后pytorch将这4个组合在了一起,方便表示,也就是lstm.weight_ih_l0,所以它的维数就是120x10

我们定义一个输入

x = Variable(torch.randn((50, 100, 10)))
h0 = Variable(torch.randn(1, 50, 30))
c0 = Variable(torch.randn(1, 50 ,30))

x的三个数字分别表示batch_size为50,序列长度为100,每个数据维数为10

h0的第二个参数表示batch_size为50,输出维数为30,第一个参数取决于网络层数和是否是双向的,如果双向需要乘2,如果是多层,就需要乘以网络层数

c0的三个参数和h0是一致的

out, (h_out, c_out) = lstm(x, (h0, c0))

这样就可以得到网络的输出了,和上面讲的一致,另外如果不传入h0和c0,默认的会传入相同维数的0矩阵

这就是我们如何在pytorch上使用RNN的基本操作了,了解完最基本的参数我们才能够使用其来做应用。

在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!

Pytorch中文文档

Pytorch中文论坛

Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:

Pytorch中文网:https://ptorch.com/

Pytorch中文文档:https://ptorch.com/docs/1/

© 著作权归作者所有

共有 人打赏支持
earnpls
粉丝 5
博文 26
码字总数 74
作品 0
昌平
程序员
终于!大家心心念念的PyTorch Windows官方支持来了

  机器之心整理   参与:机器之心编辑部      五个小时前,PyTorch 官方 GitHub 发布 0.4.0 版本,大家心心念念的 Windows 支持终于来了。      GitHub 发布https://github.com/...

机器之心 ⋅ 04/25 ⋅ 0

PyTorch 重大更新,0.4.0 版本支持 Windows 系统

雷锋网(公众号:雷锋网) AI 研习社最新消息,PyTorch 官方发布 0.4.0 版本,该版本的 PyTorch 有多项重大更新,其中最重要的改进是支持 Window 系统。 2017 年初,Facebook 在机器学习和科学...

孔令双 ⋅ 04/25 ⋅ 0

PyTorch 0.4.0 发布,正式支持 Windows 系统

PyTorch 0.4.0 已发布,除了平衡计算内存、支持更多概率分布、优化性能和修复 Bug 外,还正式官方支持 Windows 系统,不再需要借助其它开发者发布的第三方 conda 包。 更新列表: 主要核心更...

王练 ⋅ 04/25 ⋅ 0

PyTorch 1.0 正式公开,Caffe2并入PyTorch实现AI研究和生产一条龙

今天,Facebook正式公布PyTorch 1.0,这是将基于Python的PyTorch与Caffe2合并的一个新版本的框架,让开发者可以无缝地将AI模型从研究转到生产,而无需处理迁移 “现在,你只需要使用PyTorch...

技术小能手 ⋅ 05/03 ⋅ 0

pytorch学习1:环境的搭建

环境搭建 ubuntu14.04+anaconda2+python2.7 首先在conda中新建一个环境: conda create --name pytorch_learn python=2.7 进入该环境: source activate pytorch_learn 安装pytorch,(可参考......

chenyue_tju ⋅ 05/06 ⋅ 0

Caffe2现已并入PyTorch,图像处理的孩子有福了!

源 | 小象 文 | 小象君 近日,GitHub发布一则通知,深度学习框架Caffe现已将代码并入了PyTorch。 Caffe(卷积神经网络框架),全称Convolutional Architecture for Fast Feature Embedding。...

机器学习算法与自然语言处理 ⋅ 04/15 ⋅ 0

Caffe2 公布与 PyTorch 合并细节:只为提高开发效率

Caffe2 近日在其博客上公布了与 PyTorch 合并的各项细节,文中表示 Caffe2 的开发重点是性能和跨平台部署,而 PyTorch 则专注于快速原型设计和研究的灵活性。二者的组件在过去一年大量被共享...

王练 ⋅ 05/06 ⋅ 0

融合 Caffe2、ONNX 的新版 PyTorch 发布在即,能否赶超 TensorFlow?

雷锋网(公众号:雷锋网) AI 研习社按,上个月,Caffe2 代码正式并入 PyTorch,就在今天,Facebook AI 系统与平台部(AI Infra and Platform)副总 Bill Jia 发文表示,PyTorch 1.0 发布在即,...

思颖 ⋅ 05/03 ⋅ 0

业界 | 无缝整合PyTorch 0.4与Caffe2,PyTorch 1.0即将问世

  选自Facebook Research   作者:Bill Jia   机器之心编译   参与:思源、晓坤      在 F8 的第二天中,Facebook 正式宣布 PyTorch1.0 即将与大家见面,这是继一周前发布 0.4....

机器之心 ⋅ 05/03 ⋅ 0

一文读懂PyTorch张量基础(附代码)

本文介绍了PyTorch中的Tensor类,它类似于Numpy中的ndarray,它构成了在PyTorch中构建神经网络的基础。 我们已经知道张量到底是什么了,并且知道如何用Numpy的ndarray来表示它们,现在我们看...

技术小能手 ⋅ 06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 16分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 28分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 58分钟前 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 58分钟前 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部