Функция linalg.svd
Функция linalg.svd выполняет сингулярное разложение матрицы.
Первым параметром функция принимает тензор размерности
[..., M, N]. Вторым параметром можно передать флаг
full_matrices, который определяет размер возвращаемых
матриц. Третьим параметром можно указать compute_uv -
нужно ли вычислять унитарные матрицы. Четвертым параметром
передается имя операции name.
Синтаксис
tf.linalg.svd(tensor, [full_matrices], [compute_uv], [name])
Пример
Давайте выполним сингулярное разложение для матрицы размером 2 на 3:
import tensorflow as tf
t = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
s, u, v = tf.linalg.svd(t)
print(s)
print(u)
print(v)
Результат выполнения кода:
tf.Tensor([9.508032 0.7728694], shape=(2,), dtype=float32)
tf.Tensor(
[[-0.3863177 -0.9223658 ]
[-0.9223658 0.38631767]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[-0.42866713 -0.56630695 -0.7039468 ]
[ 0.80596393 0.11238242 -0.5811991 ]
[ 0.4082483 -0.8164966 0.4082483 ]], shape=(3, 3), dtype=float32)
Пример
Давайте выполним сингулярное разложение без вычисления
унитарных матриц, передав compute_uv=False:
import tensorflow as tf
t = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
s = tf.linalg.svd(t, compute_uv=False)
print(s)
Результат выполнения кода:
tf.Tensor([9.508032 0.7728694], shape=(2,), dtype=float32)
Пример
Давайте выполним сингулярное разложение с параметром
full_matrices=False, чтобы получить усеченные
унитарные матрицы:
Результат выполнения кода:
tf.Tensor([9.508032 0.7728694], shape=(2,), dtype=float32)
tf.Tensor(
[[-0.3863177 -0.9223658 ]
[-0.9223658 0.38631767]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[-0.42866713 -0.56630695 -0.7039468 ]
[ 0.80596393 0.11238242 -0.5811991 ]], shape=(2, 3), dtype=float32)