我对在Tensorflow中的第二个隐藏层之前添加一个退出层感到有些困惑吗?
w_int = tf.initializers.glorot_normal()
w = tf.Variable(w_init(shape=[512, 256]))
b = tf.Variable(tf.random_normal(256))
keep_prob = tf.placeholder(tf.float32)
layer2 = tf.nn.sigmoid(tf.add(tf.matmul(x, w), b))
layer2_drop = tf.nn.dropout(layer2, keep_prob=keep_prob)
在培训期间,我可以通过:
sess.run([adam, w], feed_dict={x: train_x, y_: train_y, keep_prob: 0.5})
在测试期间,我可以将keep_prob设置为1:
sess.run(cost_drop, feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})
如果您在tensorflow页面上查看tf.nn.dropout
,则可以看到keep_prob
已过时,我们应该使用rate
参数。
因此,除了像上面那样传递keep_prob = keep_prob
之外,我还需要在rate = 1 - keep_prob
中传递layer2_drop
吗?
如果没有,我该如何使用rate
上的keep_prob
而不是layer2_drop
?如果使用费率,我需要分别在培训和测试中通过keep_prob
吗?
警告:不赞成使用某些参数:(keep_prob)。它们将在将来的版本中删除。更新说明:请使用rate而不是keep_prob。费率应设置为rate = 1-keep_prob。
答案 0 :(得分:1)
如果您可以容忍警告消息,那么暂时使用keep_prob
很好。
将来,只有rate
可用,要进行更新,您应该使用建议的公式rate=1.-keep_prob
。
虽然可以同时使用keep_prob和rate,但请不要使用。只需坚持使用最新属性rate
。您不必同时设置它们,因为它们描述的是同一件事,并且实际上只会使用其中一个。