[딥러닝]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 으로 맞춰준다.

좋은 웹페이지 즐겨찾기