我构建了一个TensorFlow模型,该模型适用于输入队列提供的训练和测试批处理。因此,我没有明确地使用标准feed_dict提供训练数据。不过,我需要实现dropout,这需要keep_prob占位符来在测试期间关闭dropout。
如果没有单独的模型,我找不到如何解决这个问题。有什么建议吗?
由于
答案 0 :(得分: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)
从回归的角度来看,这是一个不好的例子,但它显示了如何编程辍学,并且很容易推断辍学的情况。我希望你会喜欢它:)。
答案 1 :(得分:0)
我的问题已经过时,我太复杂了。
即使存在直接提供训练示例的输入队列,仍然可以在调用sess.run()时通过feed_dict向占位符提供值。