tf.linalg.svd  |  TensorFlow v2.16.1 (original) (raw)

tf.linalg.svd

Stay organized with collections Save and categorize content based on your preferences.

Computes the singular value decompositions of one or more matrices.

View aliases

Compat aliases for migration

SeeMigration guide for more details.

tf.compat.v1.linalg.svd, tf.compat.v1.svd

tf.linalg.svd(
    tensor, full_matrices=False, compute_uv=True, name=None
)

Used in the notebooks

Used in the guide
Matrix approximation with Core APIs

Computes the SVD of each inner matrix in tensor such thattensor[..., :, :] = 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 andN.
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

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.