[딥러닝]Seq2seq 모델 만들면서 메모
1.딥러닝 모델 만드는 상황
- 딥러닝 모델을 만드는 과정을 생각해보면, 원본 데이터를 Model Train을 하려고 X_train, y_train, X_test, y_test을 마련해 둔 상황이다.
- 배치 사이즈를 500, 특징 개수가 10개, 출력 특징 개수는 1개
- 입력 시퀀스(Input sequence)가 10, 출력 시퀀스(Output Sequence)가 10인 상황
2.훈련을 위한 Sample 만들기
- 입력 배치(Input batch)의 모양(shape)은 (배치사이즈, 입력시퀀스길이, 특징개수)=(500, 10, 10)로 가공하여야 한다.
- 출력 배치(Output batch)의 모양(shape)은 (배치사이즈, 출력시퀀스길이, 특징개수)=(500, 10, 1)로 출력되어야 한다.
3. 모델 생성
- LSTMCell을 생성할 때는
_basic_rnn_seq2seq()
에 Dropout을 설정하여 마지막 결과를 계산하기 위해 사용되는 연산의 몇몇 뉴런을 누락시킨다. 학습때에는 Dropout을 0.5로 설정하여 LSTMCell을 만들었다.
with tf.compat.v1.variable_scope('LSTMCell'):
cells = []
for i in range(self.NUM_STACK_LAYERS):
with tf.compat.v1.variable_scope('RNN_{}'.format(i)):
cell = tf.contrib.rnn.LSTMCell(self.HIDDEN_DIM)
cell = tf.contrib.rnn.DropoutWrapper(cell, output_keep_prob=1.0 - self.DROPOUT)
cells.append(cell)
cell = tf.contrib.rnn.MultiRNNCell(cells)
- Session : 일종의 모델 실행하기 위한 준비(실행창)라고 생각할 수 있다.(텐서플로우 1.14버전 사용)
- feed_dict : 딕셔너리로 배치 입력, 배치 출력에 대한 정보를 모두 담고있다.({x: 입력데이터})
- optimizer(train_op)도 결정되어야 한다.(Adam 같은 optimizing method, learning rate, loss 등)
feed_dict = {rnn_model['enc_inp'][t]: batch_input[:, t] for t in range(input_seq_len)}
feed_dict.update({rnn_model['target_seq'][t]: batch_output[:, t] for t in range(output_seq_len)})
_, loss_t = sess.run([rnn_model['train_op'], rnn_model['loss']], feed_dict)
4. 모델 테스트하기
- 모델 테스트 할 때는
_basic_rnn_seq2seq
의 하이퍼파라미터인 Feed Previous 옵션은 True, Dropout을 0 으로 맞춰준다.
Author And Source
이 문제에 관하여([딥러닝]Seq2seq 모델 만들면서 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hugingstar/딥러닝-Seq2seq-모델-만들면서-메모저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)