pytorch上的循环层和全连接层操作
循环层
pytorch中的三种循环层的实现:
层对应的类 | 功能 |
torch.nn.RNN() | 多层RNN单元 |
torch.nn.LSTM() | 多层长短期记忆LSTM单元 |
torch.nn.GRU() | 多层门限循环GRU单元 |
torch.nn.RNNCell() | 一个RNN循环层单元 |
torch.nn.LSTMCell() | 一个长短期记忆LSTM单元 |
torch.nn.GRUCell() | 一个门限循环GRU单元 |
下面以torch.nn.RNN()为例介绍循环层的参数、输入和输出
nn.RNN(input_size, hidden_size, num_layers=1, nonlinearity=tanh, bias=True, batch_first=False, dropout=0, bidirectional=False)
input_size
输入特征的维度, 一般rnn中输入的是词向量,那么 input_size 就等于一个词向量的维度hidden_size
隐藏层神经元个数,或者也叫输出的维度(因为rnn输出为各个时间步上的隐藏状态)num_layers
网络的层数nonlinearity
激活函数(默认是tanh激活函数,可选relu)bias
是否使用偏置(默认是True)batch_first
输入数据的形式,默认是 False,就是这样形式,(seq(num_step), batch, input_dim),也就是将序列长度放在第一位,batch 放在第二位,如果是True,那么输入输出的shape应该是[batch_size,time_step,feature]dropout
是否应用dropout(除外最后一层), 默认不使用,如若使用将其设置成一个0或者非0的数字即可birdirectional
是否使用双向的 rnn,默认是 False
RNN的输入为input和h_0,其中input是一个形状为(seq_len,batch,input_size)的张量。h_0则是一个形状为(num_layers*num_directions,batch, hidden_size)保存着初始隐状态的张量。如果不提供就默认为0。如果是双向RNN,num_directions等于2,否则等于1.
RNN的输出为output和h_n,其中output是一个形状为(seq_len, batch, hidden_size*num_directions)的张量,保存着RNN最后一层的输出特征。如果输入是被填充过的序列,那么输出也是被填充过的序列。
h_n是一个形状为(num_layers*num_directions, batch, hidden_size)的张量,保存着最后一个时刻的隐状态。
全连接层
通常所说的全连接层是指一个由多个神经元组成的层,其所有的输出和该层所有的输入都有连接,即每个输入都会影响所有的神经元的输出。在pytorch中的nn.Linear()表示线性变换,全连接层可以看作是nn.Linear()表示线性边层再加上一个激活函数层所构成的结构。
具体操作如下:
torch.nn.Linear(in_features,out_features, bias = True)
in_features:每个输入样本的特征数量(看作神经元个数)
out_features:每个样本输出的特征数量
bias :是否添加偏置
Linear的输入为(N,in_features)的张量,输出为(N,out_features)的张量