Machine Learning

[pytorch] GRU 입력 텐서와 출력 텐서의 shape 이해

뚜둔뚜둔 2023. 7. 19. 23:40

 

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