def loop_fn(i): return linalg_ops.log_matrix_determinant(array_ops.gather( x, i))
_AddTest(MatrixUnaryFunctorGradientTest, 'MatrixInverseGradient', name, _GetMatrixUnaryFunctorGradientTest(linalg_ops.matrix_inverse, dtype, shape)) _AddTest(MatrixUnaryFunctorGradientTest, 'MatrixExponentialGradient', name, _GetMatrixUnaryFunctorGradientTest( linalg_impl.matrix_exponential, dtype, shape)) _AddTest( MatrixUnaryFunctorGradientTest, 'MatrixDeterminantGradient', name, _GetMatrixUnaryFunctorGradientTest(linalg_ops.matrix_determinant, dtype, shape)) _AddTest( MatrixUnaryFunctorGradientTest, 'LogMatrixDeterminantGradient', name, _GetMatrixUnaryFunctorGradientTest( lambda x: linalg_ops.log_matrix_determinant(x)[1], dtype, shape)) # Tests for gradients of matrix_solve_ls for dtype in np.float32, np.float64: for rows in 2, 5, 10: for cols in 2, 5, 10: for l2_regularization in 1e-6, 0.001, 1.0: shape = (rows, cols) name = '%s_%s_%s' % (dtype.__name__, '_'.join(map(str, shape)), l2_regularization) _AddTest( MatrixBinaryFunctorGradientTest, 'MatrixSolveLsGradient', name, # pylint: disable=long-lambda,g-long-lambda
_AddTest(MatrixUnaryFunctorGradientTest, 'MatrixInverseGradient', name, _GetMatrixUnaryFunctorGradientTest(linalg_ops.matrix_inverse, dtype, shape)) _AddTest(MatrixUnaryFunctorGradientTest, 'MatrixExponentialGradient', name, _GetMatrixUnaryFunctorGradientTest( linalg_impl.matrix_exponential, dtype, shape)) _AddTest( MatrixUnaryFunctorGradientTest, 'MatrixDeterminantGradient', name, _GetMatrixUnaryFunctorGradientTest(linalg_ops.matrix_determinant, dtype, shape)) _AddTest( MatrixUnaryFunctorGradientTest, 'LogMatrixDeterminantGradient', name, _GetMatrixUnaryFunctorGradientTest( lambda x: linalg_ops.log_matrix_determinant(x)[1], dtype, shape)) # The numerical Jacobian is consistently invalid for these four shapes # because the matrix square root of the perturbed input doesn't exist if shape in {(2, 5, 5), (3, 5, 5), (3, 10, 10), (3, 2, 5, 5)}: # Alternative shape that consistently produces a valid numerical Jacobian shape = extra + (size + 1, size + 1) name = '%s_%s' % (dtype.__name__, '_'.join(map(str, shape))) _AddTest( MatrixUnaryFunctorGradientTest, 'MatrixSquareRootGradient', name, _GetMatrixUnaryFunctorGradientTest(linalg_ops.matrix_square_root, dtype, shape)) # Tests for gradients of matrix_solve_ls for dtype in np.float32, np.float64:
def loop_fn(i): return linalg_ops.log_matrix_determinant(array_ops.gather(x, i))