私は現在、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