Pytorch로 시작하는 딥러닝 입문(07-05. 문자 단위 RNN: 더 많은 데이터)

2024. 6. 25. 22:22딥러닝 모델: 파이토치

더 많은 데이터 문자 단위 RNN 구현하기

 

♣ 훈련 데이터 처리하기

 

문서 집합을 생성하고, 각 문자에 고유한 정수를 부여한다. 각 문자에 정수가 부여되었으며 총 25개의 문자가 존재한다. 

 

하이퍼파라미터를 설정한다. 

 

hidden_size(은닉 상태의 크기)를 입력의 크기와 동일하게 하였는데 다른 값을 주어도 무방하다. 

앞서 만든 샘플을 10개 단위로 끊어서 샘플을 만들 예정이기 때문에 sequence_length 라는 변수를 10으로 선언한다. 

 

임의로 지정한 sequence_length 값인 10의 단위로 샘플들을 잘라서 데이터를 만든다. 

 

 

 총 170개의 샘플이 생성되었다. 각 샘플의 각 문자들은 고유한 정수로 인코딩 된 상태이다. 

 

x_data[0] 는 if you wan 에 해당한다. 

y_data[0] 는 f you want 에 해당한다. 

 

한 칸씩 시프트 된 시퀀스가 출력된다. 입력 시퀀스에 대해 원-핫 인코딩을 수행하고, 입력 데이터와 레이블 데이터를 텐서로 변환한다. 

 

 

훈련 데이터와 레이블 데이터의 크기를 확인한다. 

 

 

원-핫 인코딩 결과를 확인하기 위해 첫 번째 샘플만 출력한다. 

 

 

 

 

♣ 모델 구현하기

 

nn.RNN( ) 안에 num_layers 라는 인자를 사용한다. 이는 은닉층을 몇 개 쌓을 것인지를 의미한다. 

 

비용함수와 옵티마이저를 선언한다. 

 

 

모델에 입력을 넣어서 출력의 크기를 확인한다. 

 

레이블 데이터는 (170, 10) 의 크기를 가지는데, 후에 정확도를 측정할 때 이를 펼쳐서 계산한다. 이 경우 (1700)의 크기를 가지게 된다. 

 

 

처음에는 이상한 예측을 하지만 마지막 에포크에서는 상당히 정확한 문장을 생성한다.