TensorFlow与NumPy中矩阵乘法结合性异常致Cholesky分解报错
矩阵乘法结合性的数值差异与Cholesky分解问题
我们通过np.random.normal()生成了两个形状为(n, n)的矩阵M和C,在NumPy与TensorFlow中执行矩阵乘法时,发现结合性存在微小的数值差异,这导致TensorFlow编写的模型在计算协方差矩阵的Cholesky分解时出现意外错误。以下是简化示例(实际模型使用3D和4D张量):
import numpy as np import tensorflow as tf # 生成正态分布的随机矩阵 M = np.random.normal(0, 0.1, size=(5, 5)) C = np.random.normal(0, 0.1, size=(5, 5))
NumPy 测试结果
执行以下代码:
r1 = np.matmul(np.matmul(M, C), np.transpose(M)) r2 = np.matmul(M, np.matmul(C, np.transpose(M))) r3 = (M @ C) @ np.transpose(M) r4 = M @ (C @ np.transpose(M)) print("r1 == r2: ", np.all(r1 == r2)) print("r1 == r3: ", np.all(r1 == r3)) print("r1 == r4: ", np.all(r1 == r4)) print("r2 == r3: ", np.all(r2 == r3)) print("r2 == r4: ", np.all(r2 == r4)) print("r3 == r4: ", np.all(r3 == r4))
输出结果显示所有比较均返回True,即NumPy中不同结合顺序的矩阵乘法结果完全一致。
TensorFlow 测试结果
执行以下代码:
# 测试TensorFlow t1 = tf.linalg.matmul(tf.linalg.matmul(M, C), M, transpose_b=True) t2 = tf.linalg.matmul(M, tf.linalg.matmul(C, M, transpose_b=True)) print("t1 == t2: ", np.all(t1.numpy() == t2.numpy())) print(t1.numpy() - t2.numpy())
输出结果显示t1 == t2返回False,两者的差值量级约为1e-19。
我曾找到一个类似的讨论帖,但未得到有效解答。现在想请教:这种量级约为1e-19的数值差异,是否会导致权重矩阵无法进行Cholesky分解?
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

