AI/Pytorch
[Pytorch] torch.nn.RNN() _ RNN API
밍츠
2022. 10. 20. 15:08
torch.nn.RNN()
- Pytorch RNN API 제공
- 입력 시퀀스의 각 요소에 대해 각 계층은 아래의 함수를 꼐산한다.
Parameters
- input_size: Input의 사이즈에 해당 하는 수를 입력하면 됩니다.
- hidden_size: 은닉층의 사이즈에 해당 하는 수를 입력하면 됩니다.
- num_layers: RNN의 은닉층 레이어 개수를 나타냅니다. 기본 값은 1입니다.
- nonlinearity: 비선형 활성화 함수를 선택합니다. tanh, relu중 하나를 선택 가능하며, 기본 값은 tanh입니다.
- bias: 바이어스 값 활성화 여부를 선택합니다. 기본 값은 True 입니다.
- batch_first: True일 시, Output 값의 사이즈는 (batch, seq, feature) 가 됩니다. 기본 값은 False 입니다.
- dropout: 드롭아웃 비율을 설정 합니다. 기본 값은 0입니다.
- bidirectional: True일 시, 양방향 RNN이 됩니다. 기본 값은 False 입니다.
num_layers가 2이면? 아래와 같다.
Inputs : (input, h_0)
- input:
- (seqlen, batch, inputsize)
- h_0: (numlayers * numdirections, batch, hidden*size) 여기서 bidirectional이 True라면, num*directions는 2,False 라면 1이 된다.
Outputs : (output, h_n)
- output:
- (seqlen, batch, numdirections * hidden*size) 여기서 bidirectional이 True라면, num*directions는 2,False 라면 1이 된다.
- 각 time step에 해당하는 hidden state들의 묶음
- h_n:
- (numlayers * numdirections, batch, hidden*size) 여기서 bidirectional이 True라면, num*directions는 2,False 라면 1이 된다.
- 모든 sequence를 거치고 나온 마지막 hidden state
마지막 hidden state를 활용하여 원하는 task에 맞게 적용할 수 있다.
- text classification
- token-level
- nn.Linear(hidden_size, num_classes)에서 task에 맞게 num_classes를 설정한다.
(추가) PackedSequence
- pack_padded_sequence를 활용하여 가변 길이의 패딩 시퀀스를 포함하는 Tensor를 압축한다.
- pad_packed_sequence를 활용하여 가변 길이 시퀀스의 묶음 배치를 채운다. (pack_padded_sequence()에 대한 역연산)