0

次のようにドロップアウト保持率を指定すると、「正しく」機能する LSTM モデルがあります。

layers = [tf.contrib.rnn.DropoutWrapper(tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons, activation=tf.nn.tanh), output_keep_prob=0.5)
      for layer in range(n_layers)]

しかし、当然のことながら、私は output_keep_prob を float 変数にして、Train vs. Test で変更できるようにしたいと考えています。私はこれを以下のようにしました

    output_keep_prob = tf.placeholder_with_default(1.0, tf.float32)
...
layers = [tf.contrib.rnn.DropoutWrapper(tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons, activation=tf.nn.tanh), output_keep_prob=output_keep_prob)
          for layer in range(n_layers)]
...
sess.run(training_op, feed_dict={X: x_batch, y: y_batch, output_keep_prob: 0.5}) 

ただし、これを行うと、Tensorflow はエラーをスローします。

ValueError: 形状は同じランクである必要がありますが、入力形状: [] の 'PlaceholderWithDefault' (op: 'PlaceholderWithDefault') では 0 と 1 です。

プレースホルダーに異なる寸法を指定する必要があるかもしれないと思いますが、標準のフィードフォワード ドロップアウトではこの問題は発生していません。次元で n_layers を指定するいくつかのバリエーションを試しました (これは、問題を修正する必要があると思いますか?) が、成功していません。

4

1 に答える 1

0

思っていたよりも簡単に修正...

「デフォルト」の入力をスカラーではなくテンソルにする必要があるようです。

output_keep_prob = tf.placeholder_with_default([1.0], tf.float32)

が最初のステップであり、私のテスト/トレーニング実行の宣言では、キープ率を 0.5 ではなく [0.5] で示す同じアプローチを使用する必要があります。

sess.run(training_op, feed_dict={X: x_batch, y: y_batch, output_keep_prob:[0.5]})

于 2018-04-06T18:25:27.763 に答える