GRU
- input_size : input에 대한 features의 수
- hidden_size : hidden state의 features 수
- num_layers : GRU을 스태킹 stacking 하는 수
- batch_first: 입출력 텐서의 형태가 다음과 같음. 기본값은 False
- true로 설정 시 (batch, seq, feature)
- False로 설정 시 (seq, batch, feature)
- hidden_state에는 영향을 미치지 않음
- Bidirectional: 양방향 GRU 구현 여부, False
import torch
import torch.nn as nn
gru = nn.GRU(input_size=10. hidden_size=32, num_layer=1, batch_first=True, bidirectional=False)
gru
# GRU(10, 32, batch_first=True)
출력에 대한 이해
inputs = torch.zeros(1,35,10)
print(inputs.shape)
# torch.size([1,35,10])
outputs, hidden_state = gru(inputs)
print(outputs.shape, hidden_state.shape)
# torch.Size([1, 35, 32]) torch.Size([1, 1, 32])
- output의 shape에 대한 이해
- [1, 35, 32] 형태를 가진다.
- 이는 순서대로 [batchsize, sequence_length, hidden_size(32) * bidirectional(1)] 이다.
- hidden_sate의 shape에 대한 이해
- [1, 1, 32] 형태를 가진다.
- 이는 순서대로 [bidirectional(1) * number of layer(1), batch_size, hidden_size(32)] 이다.
Stacking GRU
- GRU를 겹층으로 쌓아 올리는 것을 Stacking이라고 한다. 이렇게 쌓아 올렸을 때는 결과 shape가 달라진다
- num_layers에 쌓고자 하는 층의 개수를 입력한다
gru=nn.GRU(input_size=10, hidden_size=32, num_layers=2, batch_first=True, bidirectional=False)
gru
# GRU(10, 32, num_layers=2, batch_first=True)
inputs = torch.zeros(1,35,10)
print(inputs,shapes)
#torch.Size([1, 35, 10])
outputs, hidden_state = gru(inputs)
print(outputs.shape, hidden_state.shape)
# torch.Size([1, 35,32])torch.Size([2,1,32])
- output의 shape에 대한 이해
- [1, 35, 32] 형태를 가진다.
- 이는 순서대로 [batchsize, sequence_length, hidden_size(32) * bidirectional(1)] 이다.
- hidden_sate의 shape에 대한 이해
- [2, 1, 32] 형태를 가진다.
- 이는 순서대로 [bidirectional(1) * number of layer(1), batch_size, hidden_size(32)] 이다.
Bidirectional GRU
- 양방향 GRU을 사용하기 위해서는 Bidirectional=True로 설정한다
gru = nn.GRU(input_size=10, hidden_size=32, num_layers=2, batch_first=True, bidirectional=True)
gru
# GRU(10,32, num_layers=2, batch_first=True, bidirectional=True)
inputs = torch.zeros(1,35,10)
print(inputs.shape)
# torch.size([1, 35,10])
outputs, hidden_state = grue(inputs)
print(outputs.shape, hidden_state.shape)
# torch.Size([1, 35,64]) torch.Size([5,1,32])
- output의 shape에 대한 이해
- [1, 35, 64] 형태를 가진다.
- 이는 순서대로 [batchsize, sequence_length, hidden_size(32) * bidirectional(2)] 이다.
- hidden_sate의 shape에 대한 이해
- [4, 1, 32] 형태를 가진다.
- 이는 순서대로 [bidirectional(2) * number of layer(2), batch_size, hidden_size(32)] 이다.
참조 : https://teddylee777.github.io/pytorch/pytorch-gru/
위의 참조를 따라적으며 내용 정리 한 것입니다.
반응형
'Machine Learning' 카테고리의 다른 글
what is Ensemble Learning? (0) | 2023.07.19 |
---|---|
what is Grid search? (0) | 2023.07.19 |
[summary]what is BERT? (0) | 2023.07.05 |
Few shot Learning, Meta Learning (3) | 2022.11.29 |
[내용정리]Meta Learning (1) | 2022.11.25 |