我有一个 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 的变体(我认为我需要解决这个问题?)但没有取得任何成功。