현재 Tensorflow 및 Recurrent Neural Networks에 들어가려고합니다. "ptb_word_lm"예제를 수정하여 imdb 작업을위한 모델을 만들었습니다. 내가 사용하고 있음을,TensorFlow imdb 작업에 대한 LSTM이 크게 적용됩니다.
https://github.com/MathiasKraus/LSTM_imdb
매개 변수에 수정 된 소스 코드를 밀어은 다음과 같습니다
가num_layers = 2
num_steps = 50
hidden_size = 128
keep_prob = 0.5
batch_size = 32
vocab_size = 10000
네트워크 정의가
self._input_data = tf.placeholder(tf.int32, [batch_size, num_steps])
self._target = tf.placeholder(tf.float32, [batch_size, n_classes])
lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(size, forget_bias=0.0, state_is_tuple=True)
cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * config.num_layers, state_is_tuple=True)
self._initial_state = cell.zero_state(batch_size, tf.float32)
with tf.device("/cpu:0"):
embedding = tf.get_variable("embedding", [vocab_size, size], dtype=tf.float32)
inputs = tf.nn.embedding_lookup(embedding, self._input_data)
output, state = tf.nn.dynamic_rnn(cell, inputs, initial_state=self._initial_state)
output = tf.transpose(output, [1, 0, 2])
last = tf.gather(output, int(output.get_shape()[0]) - 1)
softmax_w = tf.get_variable("softmax_w", [size, n_classes], dtype=tf.float32)
softmax_b = tf.get_variable("softmax_b", [n_classes], dtype=tf.float32)
logits = tf.matmul(last, softmax_w) + softmax_b
self._cost = cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, self._target))
self._train_op = tf.train.AdamOptimizer().minimize(cost)
부분이 좋아 보인다 훈련이다, 그러나 모델은 몇 에포크 후에 지나치게 적합하다. 매우 짧고 매우 긴 샘플을 필터링 한 후에 (필자는 아직 패딩을 사용하지 않음), 훈련을 위해 ~ 11k 샘플을 가지고 있습니다.
왜이 모델이 너무 빨리 지나치게 적합합니까? 또는 매개 변수 설정에 대한 제안 사항이 있습니까?
어떤 도움을 주셔서 감사합니다.
편집 : 시퀀스를로드하려면 http://deeplearning.net/tutorial/code/imdb.py을 사용합니다. 데이터를로드 한 후 LSTM에서 처리하려는 단계 수보다 짧은 시퀀스를 필터링합니다. 그 이유로 저는 제로를 덧붙일 필요가 없습니다. 또한 더 긴 시퀀스를 지정된 크기로 자릅니다.
내가 https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py에 따라 내 매개 변수를 변경 :
적어도 질문에 그래프를 추가하고 시퀀스를 만드는 방법에 대해 더 잘 설명하면 답변을 얻을 확률이 높아집니다. – Julius
의견을 보내 주셔서 감사합니다. 길을 설명하기 위해 내 게시물을 편집하고 시퀀스를 만듭니다. 또한 TensorBoard를 계산 한 후에 그래프를 추가하려고합니다. – Mathias
그래프를 추가하여 모델을 구체적으로 정의한 코드 부분을 넣을 수 있습니다. – Julius