RNN Basic 강좌를 정리한다.
RNN Basic
cell단위로 다루어 Tensorfllow 코딩으로 OUTPUT이 다시 INPUT으로 들어오게 한다.
- xxxRNNCell 의 output 사이즈를 정해주고 cell을 만든다.
- cell을 dynamic_rnn에서 cell을 실제 구동시켜본다.
cell 학습: BasicRNNCell, BasicLSTMCell등을 바꾸어 사용할 수 있다.
Cell 만들기
문자를 one hot encoding 을 이용해 vector로 표현한다.
- input dimenstion
- hidden size를 우리가 정하기 나름에 따라 정해질 수 있다.
위 두가지는 cell을 만들 때 정의하는 것이다.
Tensorflow로 표현한다.
- BasicLSTMCell 사용
- outputs, states를 얻음
hidden_size 2여서 값은 2개의 shape 가 나온다.
Unfold 풀어놓기
이것을 풀어서 (unfold) 보자.
- sequence_length 5는 unfold 5개 한다는 것이다. 입력데이터의 모양에 따라 결정된다.
Tensorflow에서 h, e, l, o에 대한 변수를 만들어 np.array([h, e, l, l, o]..)를 생성한다. dimenstion 2개인 5개 output이 나옴. 이것은 입력을 줄 때 어떤 Shape이 나오는지 출력해 본 것이다.
Batch Size 만들기
문자를 다양하게 주어 (Batch Size)를 여러개 넣어서 만들어 본다.
Tensorflow 코드
Hi Hello Training 시키기
h를 입력하면 다음은 i 나옴을 학습시킨다.
훈련시킬 단어: "hihello" 에서 Unqiue한 Vocabulary를 만든다. 문자열에 대해 index를 표현한다. 해당 index를 one hot encoding으로 변환한다.
여기서 다음을 정한다.
- 입력 차원
- Sequence 갯수
- 출력(hidden) 차원
- Batch size 정하기
Creating NN Cell
cell의 size는 출력값 5로 정한다.
- rnn_cell.BasicRNNCell(rnn_size)
- rnn_cell.BasicLSTMCell(rnn_size)
- rnn_cell.GRUCell(rnn_size)
RNN Parameters
output from the LSTM : hidden_size = 5
one-hot size : input_dim = 5
one sentence : batch_size = 1
/ihello/ == 6 : sequence_length = 6
Data Creation
Feed to RNN
None은 batch가 많아도됨을 의미. cell을 만들고, batch_size주고, dynmaic_rnn을 호출한다.
Cost: sequence_loss
얼마나 Output이 정확한가를 sequence_loss를 사용하여 예측을 해본다. 예측값이 얼마나 좋은지를 loss값으로 알 수 있다.
모델을 만든다.
지금은 output을 간단히 logits에 넣어서 사용한다. 실제는 이렇게 사용하진 않는다.
Training을 시킨다.
결과
prediction한 charactor에 대해 시간이 지날 수록 그 다음 문자에 대한 예측(prediction) 이 높아진다.
참조
'Deep Learning > NN by Sung Kim' 카테고리의 다른 글
[Reinforcement Learning] Q Network (0) | 2018.07.13 |
---|---|
[Reinforcement Learning] 강화학습 (0) | 2018.07.12 |
[RNN] Recurrent Neural Network 개념 (0) | 2018.07.11 |
[CNN] Class, tf.layers, Ensemble (0) | 2018.07.11 |
[CNN] MNIST 99% 도전 (0) | 2018.07.11 |