sdn*_*dnr 20 python gpu tensorflow
更新:仍然发生在Tensorflow 1.7.0中
更新:我写了一个协同合作的笔记本再现谷歌的GPU硬件这个错误:https://drive.google.com/file/d/13V87kSTyyFVMM7NoJNk9QTsCYS7FRbyz/view?usp=sharing
更新:在tf.gather对此问题的第一次修订中错误地指责之后,我现在将其缩小为tf.reduce_sum与占位符一起形成:
tf.reduce_sum 为大型张量生成零(仅在GPU上),其形状取决于占位符.
在向占位符提供大整数时运行以下代码batch_size(在我的情况下> 700000):
import tensorflow as tf
import numpy as np
graph = tf.Graph()
with graph.as_default():
batch_size = tf.placeholder(tf.int32,shape=[])
ones_with_placeholder = tf.ones([batch_size,256,4])
sum_out = tf.reduce_sum(ones_with_placeholder,axis=2)
min_sum_out = tf.reduce_min(sum_out)
sess = tf.Session(graph=graph)
sum_result,min_sum_result = sess.run([sum_out,min_sum_out],feed_dict={batch_size: 1000000})
print("Min value in sum_out processed on host with numpy:", np.min(sum_result))
print("Min value in sum_out tensor processed in graph with tf:", min_sum_result)
Run Code Online (Sandbox Code Playgroud)
显示以下错误结果:
Min value in sum_out processed on host with numpy: 0.0
Min value in sum_out tensor processed in graph with tf: 0.0
Run Code Online (Sandbox Code Playgroud)
我期待reduce_sum在轴2 上应用应该导致4.0无处不在!
在CPU上运行此确切代码可以获得正确的结果.对于tf.ones,使用固定形状运行它会在CPU和GPU上产生正确的结果:
ones_with_fixed_shape = tf.ones([1000000,256,4])
sum_out = tf.reduce_sum(ones_with_fixed_shape,axis=2)
Run Code Online (Sandbox Code Playgroud)
GPU上的占位符有什么问题?
基本问题是速度/准确性之间存在权衡。尽管您的示例看起来很简单,但整个张量初始化为 1,但有 1.024B 个条目。请注意,int32 可以表示 [-2,147,483,648 到 2,147,483,647] 范围内的整数,而不会损失精度:
因此,如果我们累积所有条目并执行计算,我们预计会看到一些错误。这也解释了为什么较小的矩阵没有出现问题(较小的批量大小)。
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |