总和的加数顺序会影响结果吗?

时间:2017-01-21 08:27:57

标签: python tensorflow

在以下代码中,op1op2应该相同。唯一的区别在于加数出现在总和中的顺序。但是,np.array_equal(res1, res2)会返回False。为什么会这样? (我使用的是TensorFlow版本0.12.1)。

import numpy as np
import tensorflow as tf

V = tf.constant([[-3.47429895, -5.99409866],
                 [-4.84888363, 5.3685813],
                 [8.32318401, 0.62552071]], dtype=tf.float32)

rs = tf.reduce_sum(V, axis=1, keep_dims=True)
m = -tf.matmul(V, V, transpose_b=True)
op1 = m + rs + tf.transpose(rs)
op2 = rs + tf.transpose(rs) + m

with tf.Session() as session:
    res1 = session.run(op1)
    res2 = session.run(op2)
    assert np.array_equal(res1, res2) # False, why?

1 个答案:

答案 0 :(得分:1)

它正在发生,因为浮点运算不准确,改变顺序可能会改变结果,但差异不大。

问题出在Unable to use cryptographic functions Try installing OpenSSL上,np.array_equalres1之间的误差超出了它的容忍度。尝试打印res2以获得更好的主意。您可能希望将numpy.allclose与正确选择的公差值一起使用。