pytorch
中使用 nn.RNN
类来搭建基于序列的循环神经网络,它的构造函数有以下几个参数:
- input_size:输入数据
X
的特征值的数目。 - hidden_size:隐藏层的神经元数量,也就是隐藏层的特征数量。
- num_layers:循环神经网络的层数,默认值是 1。
- bias:默认为 True,如果为 false 则表示神经元不使用
bias 偏移参数
。 - batch_first:如果设置为
True
,则输入数据的维度中第一个维度就是 batch 值,默认为 False。默认情况下第一个维度是序列的长度, 第二个维度才是batch,第三个维度是特征数目。 - dropout:如果不为空,则表示最后跟一个
dropout 层
抛弃部分数据,抛弃数据的比例由该参数指定。
RNN 中最主要的参数是 input_size 和 hidden_size,其余的参数通常不用设置,采用默认值就可以了。
import torch
rnn = torch.nn.RNN(20, 50, 2)
input = torch.randn(100, 32, 20)
h_0 =torch.randn(2, 32 ,50)
output,hn=rnn(input, h_0)
LSTM(长短时记忆网络)
标准的循环神经网络内部只有一个简单的层结构,而 LSTM 内部有 4 个层结构:
- 第一层是个忘记层:决定状态中丢弃什么信息
- 第二层
tanh
层用来产生更新值的候选项,说明状态在某些维度上需要加强,在某些维度上需要减弱 - 第三层
sigmoid
层(输入门层),它的输出值要乘到tanh
层的输出上,起到一个缩放的作用,极端情况下sigmoid
输出0说明相应维度上的状态不需要更新 - 最后一层决定输出什么,输出值跟状态有关。候选项中的哪些部分最终会被输出由一个
sigmoid
层来决定。
pytorch
中使用 nn.LSTM
类来搭建基于序列的循环神经网络,他的参数基本与RNN
类似。
lstm = torch.nn.LSTM(10, 20,2)
input = torch.randn(5, 3, 10)
h0 = torch.randn(2, 3, 20)
c0 = torch.randn(2, 3, 20)
output, hn = lstm(input, (h0, c0))
print(output.size(), hn[0].size(), hn[1].size())
#torch.Size([5, 3, 20]) torch.Size([2, 3, 20]) torch.Size([2, 3, 20])