如何在Tensorflow中的隐藏层之前添加一个辍学层?

时间:2019-06-23 20:41:11

标签: python python-3.x tensorflow

我对在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。

1 个答案:

答案 0 :(得分:1)

如果您可以容忍警告消息,那么暂时使用keep_prob很好。

将来,只有rate可用,要进行更新,您应该使用建议的公式rate=1.-keep_prob

虽然可以同时使用keep_prob和rate,但请不要使用。只需坚持使用最新属性rate。您不必同时设置它们,因为它们描述的是同一件事,并且实际上只会使用其中一个。