我试图将一个函数从numpy转换为tensorflow,但使用tf.linalg.svd和np.linalg.svd时却得到了不同的结果。我得到的数字是相同的,但是迹象不同,我真的不知道可能是什么原因。 这是使用张量v0和v1的示例:
首先在张量流一侧:
print(sess.run(v0)) = [[ 6. 9. -2. -10. 3. -6.]
[ -4. 2. -3. 8. 1. -5.]
[ 8. 1. -1. -8. 0. 0.]]
print(sess.run(v1)) = [[ 10. 9. -3. -14. 3. -5.]
[ -3. 4. -4. 9. 1. -6.]
[ 7. -2. 1. -7. -1. 2.]]
s, u, vh = tf.linalg.svd(tf.matmul(v1, tf.transpose(v0)), full_matrices=True)
print(sess.run(u)) = [[ 0.89588825 0.41272767 -0.16443875]
[-0.26711408 0.7961398 0.54296545]
[ 0.3550131 -0.44251246 0.82349767]]
print(sess.run(vh)) = [[ 0.74480337 0.56510397 -0.35485975]
[-0.36357611 0.78959825 0.49431469]
[ 0.55953583 -0.23914872 0.79355374]]
现在麻木的一面:
v0_test = sess.run(v0)
v1_test = sess.run(v1)
u_test, s_test, vh_test = numpy.linalg.svd(numpy.dot(v1_test, v0_test.T))
print(u_test) = [[-0.89588825 -0.41272767 -0.16443875]
[ 0.26711408 -0.7961398 0.54296545]
[-0.3550131 0.44251246 0.82349767]]
print(vh_test.T) = [[-0.74480337 -0.56510397 -0.35485975]
[ 0.36357611 -0.78959825 0.49431469]
[-0.55953583 0.23914872 0.79355374]]
如您所见,值是相同的(除了对vh进行了转置),但是符号不同。它们不只是相反,因为您可以看到两种情况下元素0x2的符号相同。 我检查了numpy.dot(v1_test,v0_test.T)和tf.matmul(v1,tf.transpose(v0)是相同的,所以问题出在linalg.svd。