2017-01-21 8 views
0

次のコードでは、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

浮動小数点演算が正確ではなく、順序を変更すると結果が変わる可能性がありますが、不一致はそれほど重要ではないので、起こっています。

np.array_equalの問題は、res1res2の間のエラーが許容範囲を超えています。より良い考えを得るためにres1 - res2を印刷してみてください。適切に選択した許容値を使用してnumpy.allcloseを使用することができます。

関連する問題