2016-08-31 5 views
0

현재 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에 따라 내 매개 변수를 변경 :

+0

적어도 질문에 그래프를 추가하고 시퀀스를 만드는 방법에 대해 더 잘 설명하면 답변을 얻을 확률이 높아집니다. – Julius

+0

의견을 보내 주셔서 감사합니다. 길을 설명하기 위해 내 게시물을 편집하고 시퀀스를 만듭니다. 또한 TensorBoard를 계산 한 후에 그래프를 추가하려고합니다. – Mathias

+0

그래프를 추가하여 모델을 구체적으로 정의한 코드 부분을 넣을 수 있습니다. – Julius

답변

0

는 경우 누군가가 LSTM 및 TensorFlow를 사용하여 IMDB 작업을 시도하고자합니다. 이 매개 변수를 사용하면 모델의 테스트 정확도는 ~ 82 %입니다. 나는 또한 코드를 github으로 푸시했다.

도움 주셔서 감사합니다.