티스토리 뷰

카테고리 없음

RNN 내용추가

비행기 매진 도우미 2017. 10. 17. 20:34

좀 전에 RNN 코드에 대해 설명하였는데 , 이번 포스트에서 조금 더 자세하게 다루어,

입력과 출력의 dimension 이 어떻게 결정이 되는지에 대해서 설명 하고한다. 

 

Cell 을 만드는 코드에서 출력의 size(hidden size) 정한다.
이렇게 cell 만드는 부분과 사용하는 부분을 나눈 것은, cell 을 편리하게 바꿀 수 있게 다
RNN
또는 LSTM으로 바꿀 수 있음. Output dimension cell 을 만들어줄 때 hidden_size 달려 있다.

 

Hidden_Size 2이니까, 입력 데이터의 dimension무엇이든 간에, output dimension 2가 됨.  Shape=(1,1,4)에서 마지막 4 input dimension이다.
Sequence data (
시리즈 데이터를 몇 개를 받을 것인가 가 두 번째 sequence_length : 한 번에 몇 개 펼칠 것인가. 셀을 만들, 입력 데이터의 모양에 따라서 결정된다. 출력에서의 시퀀스 길이도 같아야 함, 시퀀스는 같아야 해서. 시퀀스 사이즈는 입력의 모양에 따라 결정된다.

 

 

 

Dynamic_rnn 드라이버가 큰 힘을 발휘하는데, 입력값으로 , 위에서 만들어 둔 cell ,입력데이터인 x_data 는 one hot encoding 되어있다.(앞선 포스트에서 설명하였음)

 

 

요렇게.

Hello,가 원핫(one-hot) 인코딩 되어있는 것이며, 시퀀스_길이는 5를 가진다. (hello길이)

이렇게 넣으면 ,dynamic_rnn 이 자동적으로 구동을 하여 결과를 output으로 넘겨주고, 다음상태에 미칠 영향을 state 로 넘겨준다.(state를 직접 다루지는 않으니 걱정 말고)

 

 

 

 

 

실제출력은 dimension 2 5개의배열이 나온다

 

 

RNN을 검색하였을 때 가장 안 다룬 내용이 배치 사이즈에 관한 내용이었는데, 배치 사이즈는 RNN 드라이버가 학습을 시킬 , 몇 줄 씩 학습을 시킬 것인가에 대한 설정이다. 예제에서는 Batch_size 3을 주었는데, 이 말은, 5개의 시퀀스로 이루어진 배열을 세 개를 한 번에 학습시키는 training_data 주겠다는 말이다. 한 줄 씩 학습시키면 매우 비효율적이다
여기까지 이해하면 input output shape . 당연히 같을 수밖에 없다. 훈련시킨 만큼 훈련 결과가 나와야 하니까 (당연하겠지).
PlaceHolder 로 만들었을 경우, 배치사이즈에 None 을 넣는 것은 아무리 많아도 괜찮다 라는 뜻이다.

 

ML lab12-2: RNN - Hi Hello Training 8분까지 요약함.