2

我已经构建了一个 TensorFlow 模型,该模型适用于 Input Queues 提供的训练和测试批次。因此,我没有使用标准 feed_dict 明确提供训练数据。不过,我需要实现 dropout,它需要一个 keep_prob 占位符来在测试期间关闭 dropout。

如果没有单独的模型,我找不到如何解决这个问题。有什么建议吗?

谢谢

4

2 回答 2

0

我的问题已经过时了,我把它弄得太复杂了。

在调用 sess.run() 时,仍然可以通过 feed_dict 将值提供给占位符,即使有一个输入队列直接提供训练示例。

于 2017-09-10T14:54:30.410 回答
0

假设您的张量layer1定义如下:

layer1 = tf.nn.relu(tf.matmul(w,x)+b)

申请辍学,你只是做

dropout_layer1 = tf.nn.dropout(layer1, keep_prob)

keep_prob在某处定义,我通常用 FLAGS 控制它,但你可以在程序内部使用普通声明。然后你可以dropout_layer1用作普通张量。在这里,您有一个关于使用它的简单示例:

import tensorflow as tf
import numpy as np
tf.reset_default_graph()

keep_prob = 0.5

a = tf.get_variable('a', initializer=np.random.normal())
b = tf.get_variable('b', initializer=np.random.normal())

x=[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.]
y=list(map(lambda i: i+np.random.normal(0, 0.1), x))
f=tf.multiply(x,a)+b
f_dropout = tf.nn.dropout(f,keep_prob)

loss = tf.reduce_sum(tf.pow(f_dropout-y, 2))
train = tf.train.GradientDescentOptimizer(0.001).minimize(loss)

sess = tf.Session() #
init = tf.global_variables_initializer()
sess.run(init)

for i in range(1000):
    _, l, slope, intercept = sess.run([train, loss, a, b])
    print(list(map(lambda i: i*slope+intercept, x)))
    print('a: %.2f' %slope)
    print('b: %.2f' %intercept)

从回归的角度来看,这是一个不好的例子,但它展示了如何对 dropout 进行编程,并且很容易推断出 dropout 的作用。我希望你会喜欢它 :)

于 2017-09-10T14:30:24.790 回答