2017-04-25 8 views
0

デモの株価を予測するためにテンソルフローとPythonを使用します。しかし、私がコードにドロップアウトを追加すると、生成された数字は正しくないようです。どこに間違っているかを教えてください。テンソルフローのドロップアウトを追加すると誤った結果が発生しますか?

with tf.variable_scope(scope_name): 
    cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=n_inputs) 
    lstm_dropout = tf.nn.rnn_cell.DropoutWrapper(cell,input_keep_prob=1.0, output_keep_prob=1.0) 
    cell = tf.nn.rnn_cell.MultiRNNCell([lstm_dropout]*num_layers) 
    output, state = tf.nn.rnn(cell, input, dtype=tf.float32)  

enter image description here

enter image description here

+0

はドロップアウトを使用しないでください。トレーニング中にのみ使用してください。 – Aaron

+0

トレーニング中にドロップアウトを追加する例はありますか? –

答えて

1

あなたはトレーニングではなく、推論でドロップアウトのみ適用すべきです。

プレースホルダでドロップアウト確率を渡すことでこれを行うことができます。

次に、推論時に保持確率を1に設定します。あなたの例として

:予測を行う際に

input_keep_prob = tf.placeholder(tf.float32) 
output_keep_prob = tf.placeholder(tf.float32) 
with tf.variable_scope(scope_name): 
    cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=n_inputs) 
    lstm_dropout = tf.nn.rnn_cell.DropoutWrapper(cell,input_keep_prob=input_keep_prob, 
     output_keep_prob=output_keep_prob) 
    cell = tf.nn.rnn_cell.MultiRNNCell([lstm_dropout]*num_layers) 
    output, state = tf.nn.rnn(cell, input, dtype=tf.float32) 
#setup your loss and training optimizer 
#y_pred = ..... 
#loss = ..... 
#train_op = ..... 

with tf.Session() as sess: 
    sess.run(train_op, feed_dict={input_keep_prob=0.7, output_keep_prob=0.7}) #set dropout when training 
    y = sess.run(y_pred, feed_dict={input_keep_prob=1.0, output_keep_prob=1.0}) #retrieve the prediction without dropout when inference 
関連する問題