tf.linalg.svd
| Просмотреть исходный код на GitHub |
Вычисляет сингулярные разложения одной или нескольких матриц.
tf.linalg.svd(
tensor, full_matrices=False, compute_uv=True, name=None
)
Вычисляет SVD каждой внутренней матрицы в tensor таким образом, что 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)
| Аргументы | |
|---|---|
tensor | тензор формы [..., M, N]. Пусть P — это минимум M и N. |
full_matrices | Если истинно, вычисляются сингулярные векторы полной размерности u и v. Если ложно (по умолчанию), вычисляются только ведущие P сингулярные векторы. Игнорируется, если compute_uv равно False. |
compute_uv | Если True, то левые и правые сингулярные векторы будут вычислены и возвращены в u и v соответственно. В противном случае будут вычислены только сингулярные значения, что может быть значительно быстрее. |
name | строка, необязательное имя операции. |
| Возвращаемые значения | |
|---|---|
s | Сингулярные значения. Форма — [..., P]. Значения отсортированы в обратном порядке величины, поэтому s[..., 0] — наибольшее значение, s[..., 1] — второе по величине и т. д. |
u | Левые сингулярные векторы. Если full_matrices равно False (по умолчанию), форма — [..., M, P]; если full_matrices равно True, форма — [..., M, M]. Не возвращаются, если compute_uv равно False. |
v | Правые сингулярные векторы. Если full_matrices равно False (по умолчанию), форма — [..., N, P]. Если full_matrices равно True, форма — [..., N, N]. Не возвращаются, если compute_uv равно False. |
Совместимость с Numpy
В основном эквивалентно numpy.linalg.svd, за исключением того, что
- Порядок выходных аргументов здесь —
s,u,vприcompute_uvравномTrue, в отличие отu,s,vдля numpy.linalg.svd. - full_matrices по умолчанию —
False, в отличие отTrueдля numpy.linalg.svd. - tf.linalg.svd использует стандартное определение SVD \(A = U \Sigma V^H\), такое, что левые сингулярные векторы
a— это столбцыu, а правые сингулярные векторыa— это столбцыv. С другой стороны, numpy.linalg.svd возвращает сопряженный \(V^H\) в качестве третьего выходного аргумента.
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.
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/linalg/svd