Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow代码相同,但从CPU设备到GPU设备的结果不同_Python_Tensorflow_Gpu_Cpu_Multi Layer - Fatal编程技术网

Python Tensorflow代码相同,但从CPU设备到GPU设备的结果不同

Python Tensorflow代码相同,但从CPU设备到GPU设备的结果不同,python,tensorflow,gpu,cpu,multi-layer,Python,Tensorflow,Gpu,Cpu,Multi Layer,我正在尝试实现一个程序来测试GPU设备上的Tensorflow性能。 数据测试是MNIST数据,使用多层感知器(神经网络)进行监督训练。 我遵循了,但我将性能批处理渐变的数量更改为10000 for i in range(10000) : batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step,feed_dict={x : batch_xs, y_ : batch_ys}) if i % 500 == 0:

我正在尝试实现一个程序来测试GPU设备上的Tensorflow性能。 数据测试是MNIST数据,使用多层感知器(神经网络)进行监督训练。 我遵循了,但我将性能批处理渐变的数量更改为10000

for i in range(10000) :
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step,feed_dict={x : batch_xs, y_ : batch_ys})
if i % 500 == 0:
    print(i)
最后,当我使用此代码检查预测精度时

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
print(sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))
print(tf.convert_to_tensor(mnist.test.images).get_shape())
结果表明,不同CPU的准确率是不同的:当GPU返回的准确率约为0.9xx,而CPU仅返回0.3xx时。
有人知道原因吗?或者为什么会出现这种问题?

这种行为有两个主要原因(除了bug)

数值稳定性

事实证明,增加数字并不像看上去那么容易。假设我想把一万亿2加起来。正确答案是2万亿。但是,如果你在一台字号只有32位的机器上用浮点运算把它们加在一起,过一段时间,你的答案就会停留在一个较小的值上。原因是,过了一段时间,您要添加的2低于浮点和尾数的最小位

这类问题在数值计算中大量存在,这种特殊的差异在TensorFlow(仅举几例)中是已知的。有可能你看到了这种影响

初始条件

训练神经网络是一个随机过程,因此,它取决于初始条件。有时,特别是如果你的超参数没有很好地调整,你的网络将陷入一个很差的局部极小值附近,你将以平庸的行为结束。调整优化器参数(或者更好,使用Adam之类的自适应方法)可能会有所帮助


当然,综上所述,这是一个相当大的差异,因此我会仔细检查您的结果,然后再将其归咎于潜在的数学包或厄运。

TensorBoard将有助于调试此问题。我同意您的第一句话,非常有用。我认为这个问题通常不会经常发生。然而,我的问题是初始化不正确为了得到可重复的结果,可以将tensorflow导入集\u random\u seed set\u random\u seed(2)中的
np.random.seed(1)放入代码中。数值稳定性!我得到了它!