Pytorch循环神经网络(RNN)快速入门与实战 基金股票如何入门操作视频讲解
很久没用过Pytorch,忘得差不多了,最近课题需要用,所以整理一下RNN的使用方法。记得去年学这部分一直很迷糊,所以希望这篇博客能对大家有所帮助。
1. 简单循环神经网络结构先简单聊聊RNN的结构。最简单的一层RNN网络结构如下图所示,其中,每个箭头都表示一个权值,输入为向量 X = [ x 1 , x 2 , . . . , x T ] X=[x_1,x_2,...,x_T] X=[x1,x2,...,xT],输出向量为 Y = [ y 1 , y 2 , . . . , y T ] Y=[y1,y2,...,y_T] Y=[y1,y2,...,yT],隐含层向量为 H = [ h 1 , h 2 , . . . , h T ] H=[h_1,h_2,...,h_T] H=[h1,h2,...,hT],一层指的是有一层隐含层。 循环神经网络结构也可以表示成下面两图: 其实,这些图都是等价的。
那么循环神经网络的工作流程是怎么样的呢?一般循环神经网络的输入是时序数据,输出可以是由上述 y 1 y_1 y1至 y n y_n yn组成的向量,也可以是 y 1 y_1 y1至 y n y_n yn在连接一个线性层得到的一个数值。 比如,现在要用RNN做房价预测。如果目标是 输入今年1-6月的房价,输出是7-12月的房价,那可以直接将隐含层的输出作为网络输出。如果目标是 输入今年1-12月份的房价,输出是预测的明年1月的房价,那此时循环神经网络经过隐含层后,可以接入一个全连接层,也可以将最后时刻隐含层的输出作为网络输出,分别如下图(a)(b)所示。 另外,上述都只有一层隐含层,也可以根据具体需求设计多层,一般层数取2-10。 所以,网络的输出取哪部分,结构是什么都要看自己怎么设计。模型参数训练的数学推导在此不做证明。
2.Pytorch中RNN Layer的使用 2.1 RNN模块Pytorch中RNN模块函数为torch.nn.RNN(input_size,hidden_size,num_layers,batch_first),每个参数的含义如下:
input_size:输入数据的编码维度,比如前面举例的房价预测,房价都是用一维的数直接表示的,所以此时input_size为1;如果输入的是字符编码,比如一个字符用3维编码表示,那么此时input_size为3;hidden_size:隐含层的维数,这个维数要么参考别人的结构设置,要么自行设置,比如可以设置成20;num_layers:隐含层的层数,也就是上面几幅图有几个h层,上面都是只有1层,所以 num_layers为1。batch_first:当 batch_first设置为True时,输入的参数顺序变为:x:[batch, seq_len, input_size],h0:[batch, num_layers, hidden_size]。 2.2 输入的表示输入的表示形式,输入如下图所示,输入主要有向量 x x x、初始的 h 0 h_0 h0, 其中x:[seq_len, batch, input_size],h0:[num_layers, batch, hidden_size],下面分别介绍每个参数的意义。
seq_len:输入的长度,即有多少个 x i x_i xi,上述房价预测中,如果输入的是12个月的房价,那么seq_len就为12;batch:在训练神经网络时,可以多条数据同时训练,还是以房价预测为例,现在同时拿去年,今年共两年的数据训练网络,也就是将两年的数据batch在了一起,比如输入 x i x_i xi是去年和今年第i月份的房价;一直以来我都不太明白这个 batch是什么意思,直到看了这几篇文章:参考1,参考2,参考3,想了解版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。