在以下代码中,op1
和op2
应该相同。唯一的区别在于加数出现在总和中的顺序。但是,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?
答案 0 :(得分:1)
它正在发生,因为浮点运算不准确,改变顺序可能会改变结果,但差异不大。
问题出在Unable to use cryptographic functions Try installing OpenSSL
上,np.array_equal
和res1
之间的误差超出了它的容忍度。尝试打印res2
以获得更好的主意。您可能希望将numpy.allclose与正确选择的公差值一起使用。