0

我有一个 LSTM 模型,它在指定我的 dropout 保持率时“正确”工作,如下所示:

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:形状必须是相同的等级,但对于具有输入形状的“PlaceholderWithDefault”(操作:“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 回答