🔥알림🔥
① 테디노트 유튜브 -
구경하러 가기!
② LangChain 한국어 튜토리얼
바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs)
바로가기 🙌
④ RAG 비법노트 LangChain 강의오픈
바로가기 🙌
⑤ 서울대 PyTorch 딥러닝 강의
바로가기 🙌
[pytorch] GRU 입력 텐서와 출력 텐서의 shape 이해
이번에는 지난 LSTM 입력 텐서와 출력 텐서의 shape 이해 의 후속편으로써, pytorch의 GRU layer의 입출력 텐서의 shape에 대하여 이해해 보고 세부 옵션에 대하여 자세히 알아보도록 하겠습니다.
(참고)
GRU
-
input_size
: inputx
에 대한 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_layers=1, batch_first=True, bidirectional=False)
gru
GRU(10, 32, batch_first=True)
출력에 대한 이해
입력에 활용할 텐서 생성
inputs = torch.zeros(1, 35, 10)
print(inputs.shape)
# batch_size, sequence_length, number of features
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])
outputs
의 shape에 대한 이해
[1, 35, 32]
형태를 가집니다. 순서대로(batch_size, sequence_length, hidden_size(32) x bidirectional(1))
입니다.
hidden_state
의 shape에 대한 이해
[1, 1, 32]
형태를 가집니다. 순서대로(Bidirectional(1) x number of layers(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.shape)
# batch_size, sequence_length, number of features
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])
outputs
의 shape에 대한 이해
[1, 35, 32]
형태를 가집니다. 순서대로(batch_size, sequence_length, hidden_size(32) x bidirectional(1))
입니다.
hidden_state
의 shape에 대한 이해
[2, 1, 32]
형태를 가집니다. 순서대로(Bidirectional(1) x number of layers(2), 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)
# batch_size, sequence_length, number of features
torch.Size([1, 35, 10])
outputs, hidden_state = gru(inputs)
print(outputs.shape, hidden_state.shape)
torch.Size([1, 35, 64]) torch.Size([4, 1, 32])
outputs
의 shape에 대한 이해
[1, 35, 64]
형태를 가집니다. 순서대로(batch_size, sequence_length, hidden_size(32) x bidirectional(2))
입니다.
hidden_state
의 shape에 대한 이해
[4, 1, 32]
형태를 가집니다. 순서대로(Bidirectional(2) x number of layers(2), batch_size, hidden_size(32))
입니다.
댓글남기기