PyTorch张量比较不匹配问题:随机种子复现验证异常
PyTorch张量相等性验证失败排查
我尝试过Stack Overflow问题《How to check if two Torch tensors or matrices are equal?》中的所有解决方案,但均未成功。我以验证随机数种子的复现性为场景,编写了如下代码:
import numpy as np import os import random import torch def seed_everything(seed): random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) # for cases of multiple gpus torch.backends.cudnn.deterministic = True seed_everything(4321) a = torch.rand(1, 3) print(f"Tensor a: {a}") a_expect = torch.tensor([[0.1255, 0.5377, 0.6564]]) print(f"Tensor a_expect: {a_expect}") equal = torch.equal(a, a_expect) print(f"torch.equal: {equal}") eq = torch.eq(a, a_expect) print(f"torch.eq: {eq}") close = torch.allclose(a, a_expect) print(f"torch.allclose: {close}") diff = torch.all(torch.lt(torch.abs(torch.add(a, -a_expect)), 1e-12)) print(f"torch.all(lt(abs(add,1e-12))): {diff}")
运行后输出如下:
Tensor a: tensor([[0.1255, 0.5377, 0.6564]]) Tensor a_expect: tensor([[0.1255, 0.5377, 0.6564]]) torch.equal: False torch.eq: tensor([[False, False, False]]) torch.allclose: False torch.all(lt(abs(add,1e-12))): False
我使用的是PyTorch 1.12.1,设备为Apple M1 Mac,降级到1.10.2后问题依旧。
更新:我发现问题在于张量打印时数值被截断,将随机张量转为列表后,显示出其真实值与预期值存在精度差异:
values = a.tolist() print(f"Tensor values: {values}")
输出为:
Tensor values: [0.1255376935005188, 0.5376683473587036, 0.6563868522644043]
内容的提问来源于stack exchange,提问作者slashdottir
相关产品推荐
相关产品推荐

