Keras 3 API 文档 / 操作 API / 线性代数操作

线性代数 ops

[源代码]

cholesky 函数

keras.ops.cholesky(x, upper=False)

计算正半定矩阵的 Cholesky 分解。

参数

  • x: 输入张量,形状为 (..., M, M)
  • upper (bool): 如果为 True,则返回上三角 Cholesky 因子。如果为 False(默认值),则返回下三角 Cholesky 因子。

返回

形状为 (..., M, M) 的张量,表示 x 的 Cholesky 因子。


[源代码]

det 函数

keras.ops.det(x)

计算方阵的行列式。

参数

  • x: 输入张量,形状为 (..., M, M)

返回

形状为 (...,) 的张量,表示 x 的行列式。


[源代码]

eig 函数

keras.ops.eig(x)

计算方阵的特征值和特征向量。

参数

  • x: 输入张量,形状为 (..., M, M)

返回

  • 两个张量的元组:一个形状为 (..., M) 的张量,包含特征值;一个形状为 (..., M, M) 的张量,包含特征向量。

[源代码]

eigh 函数

keras.ops.eigh(x)

计算复厄米特矩阵的特征值和特征向量。

参数

  • x: 输入张量,形状为 (..., M, M)

返回

  • 两个张量的元组:一个形状为 (..., M) 的张量,包含特征值;一个形状为 (..., M, M) 的张量,包含特征向量。

[源代码]

inv 函数

keras.ops.inv(x)

计算方阵的逆。

参数

  • x: 输入张量,形状为 (..., M, M)

返回

形状为 (..., M, M) 的张量,表示 x 的逆。


[源代码]

logdet 函数

keras.ops.logdet(x)

计算厄米特正定矩阵行列式的对数。

参数

  • x: 输入矩阵。必须是二维且为方阵。

返回

矩阵行列式的自然对数。


[源代码]

lstsq 函数

keras.ops.lstsq(a, b, rcond=None)

返回线性矩阵方程的最小二乘解。

计算向量 x,该向量近似求解方程 a @ x = b。该方程可能欠定、适定或超定(即,a 的线性无关行数可能小于、等于或大于其线性无关列数)。如果 a 是方阵且满秩,则 x(除了舍入误差)是方程的精确解。否则,x 使 b - a * x 的 L2 范数最小。

如果存在多个最小化解,则返回 L2 范数最小的解。

参数

  • a: "系数"矩阵,形状为 (M, N)
  • b: 纵坐标或"因变量"值,形状为 (M,)(M, K)。如果 b 是二维的,则为 b 的每个列计算最小二乘解。
  • rcond: a 的奇异值截止比率。为确定秩,当奇异值小于 rcond 乘以 a 的最大奇异值时,将其视为零。

返回

形状为 (N,)(N, K) 的张量,包含最小二乘解。

注意: 输出与 numpy.linalg.lstsq 不同。NumPy 返回一个包含四个元素的元组,第一个元素是最小二乘解,其他元素几乎从不使用。Keras 只返回第一个值。这样做是为了确保跨后端的兼容性(其他值无法实现),并简化 API。


[源代码]

lu_factor 函数

keras.ops.lu_factor(x)

计算方阵的 LU 分解。

参数

  • x: 形状为 (..., M, M) 的张量。

返回

  • 两个张量的元组:一个形状为 (..., M, M) 的张量,包含下三角和上三角矩阵;一个形状为 (..., M) 的张量,包含枢轴。

[源代码]

norm 函数

keras.ops.norm(x, ord=None, axis=None, keepdims=False)

矩阵或向量范数。

根据 ord 参数的值,此函数能够返回八种不同的矩阵范数之一,或无限多种向量范数之一(如下所述)。

参数

  • x:输入张量。
  • ord: 范数的阶(参见"说明"下的表格)。默认为 None
  • axis: 如果 axis 是整数,则指定计算向量范数的 x 的轴。如果 axis 是一个 2 元组,则指定包含 2D 矩阵的轴,并计算这些矩阵的矩阵范数。
  • keepdims:如果设置为 True,则被规约的轴将作为大小为 1 的维度保留在结果中。

注意:对于 ord < 1 的值,结果严格来说不是数学上的"范数",但仍可用于各种数值计算。可以计算以下范数: - 对于矩阵: - ord=None: Frobenius 范数 - ord="fro": Frobenius 范数 - ord="nuc": 核范数 - ord=np.inf: max(sum(abs(x), axis=1)) - ord=-np.inf: min(sum(abs(x), axis=1)) - ord=0: 不支持 - ord=1: max(sum(abs(x), axis=0)) - ord=-1: min(sum(abs(x), axis=0)) - ord=2: 2-范数(最大奇异值) - ord=-2: 最小奇异值 - 其他: 不支持 - 对于向量: - ord=None: 2-范数 - ord="fro": 不支持 - ord="nuc": 不支持 - ord=np.inf: max(abs(x)) - ord=-np.inf: min(abs(x)) - ord=0: sum(x != 0) - ord=1: 如下 - ord=-1: 如下 - ord=2: 如下 - ord=-2: 如下 - 其他: sum(abs(x)**ord)**(1./ord)

返回

矩阵或向量的范数。

示例

>>> x = keras.ops.reshape(keras.ops.arange(9, dtype="float32") - 4, (3, 3))
>>> keras.ops.linalg.norm(x)
7.7459664

[源代码]

qr 函数

keras.ops.qr(x, mode="reduced")

计算张量的 QR 分解。

参数

  • x: 输入张量,形状为 (..., M, N)
  • mode: 指定 QR 分解模式的字符串。
    • 'reduced': 返回约简 QR 分解。(默认)
    • 'complete': 返回完整 QR 分解。

返回

包含两个张量的元组。第一个形状为 (..., M, K) 的张量是正交矩阵 q,第二个形状为 (..., K, N) 的张量是上三角矩阵 r,其中 K = min(M, N)

示例

>>> x = keras.ops.convert_to_tensor([[1., 2.], [3., 4.], [5., 6.]])
>>> q, r = qr(x)
>>> print(q)
array([[-0.16903079  0.897085]
       [-0.5070925   0.2760267 ]
       [-0.8451542  -0.34503305]], shape=(3, 2), dtype=float32)

[源代码]

solve 函数

keras.ops.solve(a, b)

求解由 a x = b 给出的线性方程组。

参数

  • a: 形状为 (..., M, M) 的张量,表示系数矩阵。
  • b: 形状为 (..., M)(..., M, N) 的张量,表示右侧或"因变量"矩阵。

返回

形状为 (..., M)(..., M, N) 的张量,表示线性方程组的解。返回的形状与 b 相同。


[源代码]

solve_triangular 函数

keras.ops.solve_triangular(a, b, lower=False)

求解由 a x = b 给出的线性方程组。

参数

  • a: 形状为 (..., M, M) 的张量,表示系数矩阵。
  • b: 形状为 (..., M)(..., M, N) 的张量,表示右侧或"因变量"矩阵。

返回

形状为 (..., M)(..., M, N) 的张量,表示线性方程组的解。返回的形状与 b 相同。


[源代码]

svd 函数

keras.ops.svd(x, full_matrices=True, compute_uv=True)

计算矩阵的奇异值分解。

参数

  • x: 输入张量,形状为 (..., M, N)

返回

  • 三个张量的元组:一个形状为 (..., M, M) 的张量,包含左奇异向量;一个形状为 (..., M, N) 的张量,包含奇异值;一个形状为 (..., N, N) 的张量,包含右奇异向量。