LSTM Dropout Wrapper排名错误

时间:2018-04-05 19:54:51

标签: tensorflow lstm dropout

我有一个正常工作的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变成一个浮点变量,当我在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:形状必须等于等级,但为0和1   ' PlaceholderWithDefault' (op:' PlaceholderWithDefault')带输入   形状:[]。

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

1 个答案:

答案 0 :(得分: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]})