1、循环神经网络的简单结构
对于每一条输入数据有几个描述量:
数据的长度(sequence length)- 即数据的时间步的数目,一个时间步可以通俗理解成一个单词
数据尺寸(input/output size)-每个时间步的元素包含的特征个数,比如一个单词用one-hot向量 表示的话,input size就是这个向量的长度
循环神经网络中的每一个时间步的网络参数都是一样的
2、关于pytorch中循环神经网络模块的调用
torch.nn.lstm(input_size,hidden_size,num_layers=1,bias=True,batch_first=False,dropout=False,bidirectional=False)
举例:lstm模型的使用
inputsize=28
hiddensize=128
model = torch.nn.lstm(inputsize,hiddensize,num_layers=1,batch_first=True)
output,(ht,ct) = model(x,(h0,c0))
关于x,h0,c0的输入形式说明
x:shape是(sequence_length,input_size)或(sequence_length, batch_size,input_size)或者(batch_size,sequence_length,input_szie)的张量,上述三种形式分别对应的情况是:x是一条单一数据;x是一批数据,且lstm中batch_first值为False;x是一批数据,且lstm中batch_first值为True
h0:shape是(D*num_layers,hidden_size/proj_size), 对于单向循环神经网络,D等于1,对于双向循环神经网络,D=2,理解为网络的每一层,每个方向都有一个独立的hidden_size大小的向量输入;如果是批量数据的话,则h0的shape是(D*num_layers,batch_size,hidden_size/proj_size)
c0:shape是(D*num_layers,batch_size, hidden_size)或者(D*num_layers)
关于模型的输出output,ht,ct的数据形式说明
output:shape是(sequence_length,D*out_size)或者(sequence_length, batch_size, D*out_size)或者(batch_size, sequence_length, D*out_size)
ht:shape是(D*num_layers, out_size)或者(D*numlayers, batch_size, out_szie)
ct:shape是(D*num_layers, hidden_size)或者(D*numlayers, batch_size, hidden_size)
3、nn.lstm的计算图
注:公式中的⚪中心加点的符号是阿达玛乘积运算,即对于两个矩阵的阿达玛乘积是将矩阵对应元素做乘积