2017-08-17 9 views
-1

単位行列が得られない、私は次のコードを持っている:マトリックスm1はPythonでTensorFlowを使用して

sess = tf.InteractiveSession() # so I can eval() 
t1 = tf.convert_to_tensor([[1,4,5],[34,5,1],[53,1,4]],dtype=tensorflow.float32) 
t1.eval() 
OUTPUT>> array([[ 1., 4., 5.], 
     [ 34., 5., 1.], 
     [ 53., 1., 4.]], dtype=float32) 
# so far, so good! 

t1_inverse = tf.matrix_inverse(t1) 
t1_inverse.eval() 
OUTPUT>> array([[-0.01294278, 0.00749319, 0.01430518], 
    [ 0.05653951, 0.17779292, -0.11512262], 
    [ 0.15735695, -0.14373296, 0.08923706]], dtype=float32) 
# I'm not a math whiz but this looks like an inverted matrix to me! 

(t1*t1_inverse).eval() # should yield identity matrix, but.. 
OUTPUT>> array([[-0.01294278, 0.02997275, 0.07152588], 
     [ 1.92234337, 0.88896459, -0.11512262], 
     [ 8.33991814, -0.14373296, 0.35694823]], dtype=float32) 

をだから私の質問は、なぜ行列t1はその逆数を掛けない、ではありません恒等行列、[[1,0,0]、[0,1,0]、[0,0,1]]?私はbroadcast multiplicationを行いますと仮定

(t1*t1_inverse).eval() 

:ここ

答えて

1

を使用する必要があります

ご希望のものはmatmul

0123です
+0

はい、t1 * t2(またはそれに相当するtf.matrix_multiply(t1、t2))はブロードキャスト乗算であるようです。ありがとう! – zannorman

1

t1*t1_inverseは、要素ごとの乗算である、あなたはあなたがあなたのコード内で通常の乗算​​記号を使用しているtf.matmul

idenity_mat = tf.matmul(t1, t1_inverse) 
sess.run(identity_mat) 

# Results: array([[ 1.00000000e+00, 5.96046448e-08, 0.00000000e+00], 
        [ 0.00000000e+00, 1.00000000e+00, -6.70552254e-08], 
        [ 0.00000000e+00, 5.96046448e-08, 9.99999881e-01]], dtype=float32) 
関連する問題