diff options
-rw-r--r-- | tensorflow/core/kernels/cholesky_op.cc | 6 | ||||
-rw-r--r-- | tensorflow/core/kernels/matrix_solve_ls_op.cc | 13 |
2 files changed, 10 insertions, 9 deletions
diff --git a/tensorflow/core/kernels/cholesky_op.cc b/tensorflow/core/kernels/cholesky_op.cc index 5c7102f6f6..755ce7c43b 100644 --- a/tensorflow/core/kernels/cholesky_op.cc +++ b/tensorflow/core/kernels/cholesky_op.cc @@ -64,11 +64,11 @@ class CholeskyOp : public LinearAlgebraOp<Scalar> { Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> llt_decomposition(input); - // Output the lower triangular in a dense form. - outputs->at(0) = llt_decomposition.matrixL(); - OP_REQUIRES(context, llt_decomposition.info() == Eigen::Success, errors::InvalidArgument(kErrMsg)); + + // Output the lower triangular in a dense form. + outputs->at(0) = llt_decomposition.matrixL(); } }; diff --git a/tensorflow/core/kernels/matrix_solve_ls_op.cc b/tensorflow/core/kernels/matrix_solve_ls_op.cc index 11e7c94faf..381a5ec7b9 100644 --- a/tensorflow/core/kernels/matrix_solve_ls_op.cc +++ b/tensorflow/core/kernels/matrix_solve_ls_op.cc @@ -105,18 +105,19 @@ class MatrixSolveLsOp : public LinearAlgebraOp<Scalar> { // using Cholesky decomposition. Matrix gramian(cols, cols); gramian.template triangularView<Eigen::Lower>() = - matrix.transpose() * matrix; + matrix.adjoint() * matrix; if (l2_regularizer > 0) { gramian += (Scalar(l2_regularizer) * Matrix::Ones(cols, 1)).asDiagonal(); } - const Eigen::LLT<Matrix, Eigen::Lower> llt(gramian); + const Eigen::LLT<Eigen::Ref<Matrix>, Eigen::Lower> llt(gramian); OP_REQUIRES( context, llt.info() == Eigen::Success, errors::InvalidArgument("Input matrix was rank deficient or " "ill-conditioned. Try setting fast=False " "or provide a larger l2_regularizer > 0.")); - outputs->at(0) = llt.solve(matrix.transpose() * rhs); + outputs->at(0).noalias() = matrix.adjoint() * rhs; + llt.solveInPlace(outputs->at(0)); } else { // Underdetermined case (rows < cols): Solves the minimum-norm problem // min ||X||_F^2 s.t. A*X = RHS @@ -125,18 +126,18 @@ class MatrixSolveLsOp : public LinearAlgebraOp<Scalar> { // using Cholesky decomposition. Matrix gramian(rows, rows); gramian.template triangularView<Eigen::Lower>() = - matrix * matrix.transpose(); + matrix * matrix.adjoint(); if (l2_regularizer > 0) { gramian += (Scalar(l2_regularizer) * Matrix::Ones(rows, 1)).asDiagonal(); } - const Eigen::LLT<Matrix, Eigen::Lower> llt(gramian); + const Eigen::LLT<Eigen::Ref<Matrix>, Eigen::Lower> llt(gramian); OP_REQUIRES( context, llt.info() == Eigen::Success, errors::InvalidArgument("Input matrix was rank deficient or " "ill-conditioned. Try setting fast=False " "or provide an l2_regularizer > 0.")); - outputs->at(0) = matrix.transpose() * llt.solve(rhs); + outputs->at(0).noalias() = matrix.adjoint() * llt.solve(rhs); } } else { // Use complete orthogonal decomposition which is backwards stable and |