2017-01-21 3 views
0

Im folgenden Code sollten op1 und op2 identisch sein. Der einzige Unterschied besteht in der Reihenfolge, in der die Summanden in der Summe erscheinen. np.array_equal(res1, res2) gibt jedoch False zurück. Warum passiert das? (Ich verwende TensorFlow Version 0.12.1).Reihenfolge der Summanden in einer Summe beeinflusst das Ergebnis?

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? 

Antwort

1

Es passiert, weil Gleitkommaoperationen nicht genau sind und eine Änderung der Reihenfolge die Ergebnisse ändern kann, obwohl die Diskrepanz nicht signifikant ist. Das Problem ist hier mit np.array_equal, der Fehler zwischen res1 und res2 ist mehr als es tolerieren kann. Versuchen Sie, res1 - res2 zu drucken, um eine bessere Idee zu erhalten. Vielleicht möchten Sie numpy.allclose mit richtig gewählten Toleranzwerten verwenden.

Verwandte Themen