首页 > 解决方案 > 给定大量输入,TensorFlow reduce_sum 返回部分不正确的输出

问题描述

我遇到一个问题,reduce_sum在 TensorFlow 中,输入大于一定大小时返回不正确的值。

具体来说,如果我生成一个随机的 64x512x4096x2 张量并reduce_sum在第 3 轴上与手动添加第 3 维中的第 0 和第 1 个元素进行比较,正如预期的那样,生成的张量在所有 134217728 个元素中都是相同的。

但是,如果我对65 x512x4096x2 张量执行完全相同的步骤,则生成的张量在前 134217728 个元素上一致,但在剩余的 2097152 上不同。

我已经在几台不同的机器和 GPU 上尝试过这个。这是一个应重现结果的独立片段:

import tensorflow as tf

with tf.Session() as sess:
  test = tf.random_uniform([64, 512, 4096, 2])
  print(tf.reduce_sum(tf.to_int32(tf.logical_not(tf.equal(test[:,:,:,0] + test[:,:,:,1], tf.reduce_sum(test, axis=3))))).eval())
  # 0
  print(tf.reduce_sum(tf.to_int32(tf.equal(test[:,:,:,0]+test[:,:,:,1], tf.reduce_sum(test, axis=3)))).eval())
  # 134217728

  test = tf.random_uniform([65, 512, 4096, 2])
  print(tf.reduce_sum(tf.to_int32(tf.logical_not(tf.equal(test[:,:,:,0] + test[:,:,:,1], tf.reduce_sum(test, axis=3))))).eval())
  # 2097152
  print(tf.reduce_sum(tf.to_int32(tf.equal(test[:,:,:,0] + test[:,:,:,1], tf.reduce_sum(test, axis=3)))).eval())
  # 134217728

标签: tensorflow

解决方案


推荐阅读