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