2016-08-31 9 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にプッシュしました。

ありがとうございました!

関連する問題