2017-09-25 3 views
0

Tensorflowで長い短期記憶ネットワークを設計するコードを書きました。このコードは、私が多くの変更を加えて、このウェブサイトでいくつかのコメントを読んだ後に働いています。 コードのこの部分を説明することが重要である: enter image description hereテンソルフローにおけるlstmネットワークの再利用変数の説明

tf.reset_default_graph() 
with tf.variable_scope("conv1"): 
    cell= tf.contrib.rnn.LSTMCell(n_hidden_units, forget_bias=0.0, state_is_tuple=True,reuse=tf.get_variable_scope().reuse) 
    outputs, final_state = tf.nn.dynamic_rnn(cell, X_in, initial_state=init_state, time_major=False,scope="conv1") 

ロス関数のプロットは、このように常にあります。

ある時点では、トレーニング損失関数の減少と検証損失関数の増加があります。私はそれがこのようなものであってはならないと思う。変数の再利用が私のコードで正しいかどうか尋ねたいと思いますか?損失関数プロットで何が間違っているかを知っていれば?

ありがとうございます。

編集:

私は解決策を見つけることができないので、理解することが容易になりますので、多分私は、私のコードをポストする必要があり考えた:

tf.reset_default_graph() 
x = tf.placeholder(tf.float32, [None, n_steps, n_inputs]) 
y = tf.placeholder(tf.float32, [None, n_classes]) 
weights = { 
# (147, 128),tf.random_normal_initializer(mean=0.0, stddev=0.1) 
'in': tf.get_variable('W_in',shape=[n_inputs, n_hidden_units],initializer=tf.truncated_normal_initializer(stddev=0.5)), 
# (128, 5) 
'out': tf.get_variable('W_out',shape=[n_hidden_units, n_classes],initializer=tf.truncated_normal_initializer(stddev=0.5))} 
biases = { 
# (128,) 
'in': tf.get_variable('b_in',shape=[n_hidden_units, ],initializer=tf.random_normal_initializer(stddev=0.5)), 
# (5,) 
'out': tf.get_variable('b_out', shape=[n_classes, ],initializer=tf.random_normal_initializer(stddev=0.5))} 
def lstm_cell(): 
     return tf.contrib.rnn.BasicLSTMCell(n_hidden_units, forget_bias=0.0, state_is_tuple=True,reuse=tf.get_variable_scope().reuse) 

def RNN(X, weights, biases): 
     X = tf.reshape(X, [-1, n_inputs]) 
     X_in = tf.nn.tanh(tf.matmul(X, weights['in']) + biases['in']) 
     X_in=tf.nn.dropout(X_in,keep_prob=0.5) 
     X_in = tf.reshape(X_in, [-1, n_steps, n_hidden_units]) 
     with tf.variable_scope("conv1"): 
      cell = lstm_cell() 
      cell = tf.contrib.rnn.DropoutWrapper(cell, output_keep_prob=0.5) 
      init_state = cell.zero_state(tf.shape(X_in)[0], dtype=tf.float32) 
      outputs, final_state = tf.nn.dynamic_rnn(cell, X_in, initial_state=init_state, time_major=False,scope="conv1") 
     outputs = tf.unstack(tf.transpose(outputs, [1,0,2])) 
     results = tf.matmul(outputs[-1], weights['out']) + biases['out']  

     return results 

pred = RNN(x, weights, biases) 
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y)) 
train_op = tf.train.AdamOptimizer(0.0025).minimize(cost) 

答えて

0

一般的に、あなたの検証損失が増加し始めた場合それはあなたのネットワークがトレーニングデータにあてはまることを意味します。正則化、ドロップアウトなどの方法でこれを減らすことができます。また、ネットワーク内のニューロン/レイヤー全体の数を減らす必要があります。

+0

私は異なる数のニューロンを試しましたが、プロットは同じです。私はpropability 0.5のドロップアウトを試み、前のプロットが結果です。 – mahmood227

関連する問題