linalg.svd

时间:2018-08-20 09:43:04

标签: python-3.x numpy tensorflow svd

我试图将一个函数从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。

0 个答案:

没有答案