LSTM Dropout Wrapper 排名错误

LSTM Dropout Wrapper Rank Error

我有一个 LSTM 模型 "correctly" 在指定我的 dropout keep rate 时工作如下:

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 变成一个浮点变量,当我在训练与测试中时我可以改变它。我这样做如下

    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: Shapes must be equal rank, but are 0 and 1 for 'PlaceholderWithDefault' (op: 'PlaceholderWithDefault') with input shapes: [].

我想我可能需要在占位符上指定不同的维度,但我没有在标准前馈 dropout 上遇到过这个问题。我已经尝试了在维度中指定 n_layers 的几种变体(我认为我需要解决这个问题?)但没有取得任何成功。

比我想象的更容易修复...

看来我需要将 "default" 输入作为张量而不是标量,所以

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

是第一步,在我的 test/train 运行声明中,我需要使用相同的方法,用 [0.5] 表示保持率,而不仅仅是 0.5。

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