我对Tensorflow和机器学习的了解还不多,所以请原谅我可能问了一个简单的问题。
我使用了Dropout技术来提高网络的学习速度,看起来效果不错。接着,我想在一些数据上测试网络,看看它是否能正常工作,像这样:
def Ask(self, image): return self.session.run(self.model, feed_dict = {self.inputPh: image})
显然,每次运行结果都不同,因为Dropout仍然在起作用。我想到的一个解决方案是创建两个独立的模型——一个用于训练,另一个用于网络的实际后续使用,但这种解决方案对我来说似乎不太实用。
解决这个问题的一般方法是什么?
回答:
最简单的方法是使用placeholder_with_default
来更改keep_prob
参数:
prob = tf.placeholder_with_default(1.0, shape=())layer = tf.nn.dropout(layer, prob)
这样在训练时你可以这样设置参数:
sess.run(train_step, feed_dict={prob: 0.5})
而在评估时会使用默认值1.0。