모두를 위한 딥러닝 2 :: RNN 11 -1 Basics

RNN in PyTorch

PyTorch에서 RNN은 크게 두줄을 통해 한셀을 정의해줄 수 있음.

  • 첫번째 줄 = torch.nn.RNN() 을 이용해서 inputsize와 hiddensize을 선언해줌. cell을 정의 해주는 문장이라고 생각하면됨.
  • 두번째 줄 = A라는 function에 input값과 이전 state를 넣어주고, 출력하는 문장으로 생각하게 됨. 이 때 input_data는 3개의 차원을 가진 tensor로 정의됨.
  • 이외의 코드 : data size를 변환해주는 과정이라고 생각하면됨

Simple Example :: input

  • 1-hot encoding: 1-hot encoding은 사전식으로 단어만큼 벡터를 나열하고 해당되는 문자의 index의 1을 켜고 0으로 끄는 방식.

Simple Example :: hidden state

  • 어떤 벡터의 사이즈로 출력을 원하는 가에 따라서 사이즈를 구해줌
  • hidenstate는 output과 다르게 숨겨진 상태로 다음것의 sequence input에 전달된다.
  • 분기되는 방식으로 전달되기에 output과 hiddenstate는 같은 사이즈로 출력되게 됨

Simple Example :: Sequence Length

  • 모델이 자동으로 Sequence Length를 알아서 파악함
  • hello라면 단어의 길이를 파악해 5를 출력

Simple Example :: Batch Size

  • 모델이 자동으로 Batch size를 알아서 파악함

소스코드

import torch
import numpy as np

# Random seed to make results deterministic and reproducible
torch.manual_seed(0)

# declare dimension
input_size = 4
hidden_size = 2

# singleton example
# shape : (1, 1, 4)
# input_data_np = np.array([[[1, 0, 0, 0]]])

# sequential example
# shape : (3, 5, 4)
h = [1, 0, 0, 0]
e = [0, 1, 0, 0]
l = [0, 0, 1, 0]
o = [0, 0, 0, 1]
input_data_np = np.array([[h, e, l, l, o], [e, o, l, l, l], [l, l, e, e, l]], dtype=np.float32)

# transform as torch tensor
input_data = torch.Tensor(input_data_np)

# declare RNN
rnn = torch.nn.RNN(input_size, hidden_size)

# check output
outputs, _status = rnn(input_data)
print(outputs)
print(outputs.size())

좋은 웹페이지 즐겨찾기