TensorFlow 1 version
 | 
  
     
    View source on GitHub
  
 | 
Computes the singular value decompositions of one or more matrices.
tf.linalg.svd(
    tensor, full_matrices=False, compute_uv=True, name=None
)
Computes the SVD of each inner matrix in tensor such that
tensor[..., :, :] = u[..., :, :] * diag(s[..., :, :]) *
 transpose(conj(v[..., :, :]))
# a is a tensor.
# s is a tensor of singular values.
# u is a tensor of left singular vectors.
# v is a tensor of right singular vectors.
s, u, v = svd(a)
s = svd(a, compute_uv=False)
Args | |
|---|---|
tensor
 | 
Tensor of shape [..., M, N]. Let P be the minimum of M and
N.
 | 
full_matrices
 | 
If true, compute full-sized u and v. If false
(the default), compute only the leading P singular vectors.
Ignored if compute_uv is False.
 | 
compute_uv
 | 
If True then left and right singular vectors will be
computed and returned in u and v, respectively. Otherwise, only the
singular values will be computed, which can be significantly faster.
 | 
name
 | 
string, optional name of the operation. | 
Returns | |
|---|---|
s
 | 
Singular values. Shape is [..., P]. The values are sorted in reverse
order of magnitude, so s[..., 0] is the largest value, s[..., 1] is the
second largest, etc.
 | 
u
 | 
Left singular vectors. If full_matrices is False (default) then
shape is [..., M, P]; if full_matrices is True then shape is
[..., M, M]. Not returned if compute_uv is False.
 | 
v
 | 
Right singular vectors. If full_matrices is False (default) then
shape is [..., N, P]. If full_matrices is True then shape is
[..., N, N]. Not returned if compute_uv is False.
 | 
Numpy Compatibility
Mostly equivalent to numpy.linalg.svd, except that
- The order of output  arguments here is 
s,u,vwhencompute_uvisTrue, as opposed tou,s,vfor numpy.linalg.svd. - full_matrices is 
Falseby default as opposed toTruefor numpy.linalg.svd. - tf.linalg.svd uses the standard definition of the SVD
\(A = U \Sigma V^H\), such that the left singular vectors of 
aare the columns ofu, while the right singular vectors ofaare the columns ofv. On the other hand, numpy.linalg.svd returns the adjoint \(V^H\) as the third output argument. 
import tensorflow as tf
import numpy as np
s, u, v = tf.linalg.svd(a)
tf_a_approx = tf.matmul(u, tf.matmul(tf.linalg.diag(s), v, adjoint_b=True))
u, s, v_adj = np.linalg.svd(a, full_matrices=False)
np_a_approx = np.dot(u, np.dot(np.diag(s), v_adj))
# tf_a_approx and np_a_approx should be numerically close.
  TensorFlow 1 version
    View source on GitHub