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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM