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)的张量

原文地址:https://www.cnblogs.com/2020zxc/p/13622561.html