Ver fuente en GitHub

Calcule la pseudoinversa de Moore-Penrose de una o más matrices.

Ver alias

Alias ​​de compatibilidad para la migración

Ver Guía de migración para más detalles.

tf.compat.v1.linalg.pinv

tf.linalg.pinv(
    a, rcond=None, validate_args=False, name=None)

Calcula el inversa generalizada de una matriz utilizando su descomposición en valores singulares (SVD) e incluyendo todos los valores singulares grandes.

La pseudo-inversa de una matriz Ase define como: ‘la matriz que ‘resuelve’ [the least-squares problem] A @ x = b‘, es decir, si x_hat es una solución, entonces A_pinv es la matriz tal que x_hat = A_pinv @ b. Se puede demostrar que si U @ Sigma @ V.T = A es la descomposición en valores singulares de Aluego A_pinv = V @ inv(Sigma) U^T. [(Strang, 1980)][1]

Esta función es análoga a numpy.linalg.pinv. Difiere solo en el valor predeterminado de rcond. En numpy.linalg.pinvel valor por defecto rcond es 1e-15. Aquí el valor predeterminado es 10. * max(num_rows, num_cols) * np.finfo(dtype).eps.

argumentos
a (Lote de) float-como en forma de matriz Tensor(s) que se van a pseudo-invertir.
rcond Tensor de pequeños valores de corte singulares. Valores singulares más pequeños (en módulo) que rcond * mayor_valor_singular (nuevamente, en módulo) se establecen en cero. Debe transmitir contra tf.shape(a)[:-2]. Valor por defecto: 10. * max(num_rows, num_cols) * np.finfo(a.dtype).eps.
validate_args Cuándo True, se pueden incrustar aserciones adicionales en el gráfico. Valor por defecto: False (es decir, no se agregan aserciones gráficas).
name Pitón str antepuesto a las operaciones creadas por esta función. Valor por defecto: ‘pinv’.
Devoluciones
a_pinv (Lote de) pseudo-inverso de entrada a. Tiene la misma forma que a excepto que se transponen las dos dimensiones más a la derecha.
aumenta
TypeError si entrada a no tiene float-me gusta dtype.
ValueError si entrada a tiene menos de 2 dimensiones.

Ejemplos

import tensorflow as tf
import tensorflow_probability as tfp

a = tf.constant([[1.,0.4,0.5],[0.4,0.2,0.25],[0.5,0.25,0.35]])
tf.matmul(tf.linalg..pinv(a), a)# ==> array([[1., 0., 0.],[0.,1.,0.],[0.,0.,1.]], dtype=float32)

a = tf.constant([[1.,0.4,0.5,1.],[0.4,0.2,0.25,2.],[0.5,0.25,0.35,3.]])
tf.matmul(tf.linalg..pinv(a), a)# ==> array([[ 0.76,  0.37,  0.21, -0.02],[0.37,0.43,-0.33,0.02],[0.21,-0.33,0.81,0.01],[-0.02,0.02,0.01,1.]], dtype=float32)

Referencias

[1]: G. Strang. ‘Álgebra lineal y sus aplicaciones, 2ª ed.’ Academic Press, Inc., 1980, págs. 139-142.