You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用模型预测值替换张量像素值后,torch.equal返回True问题排查

问题原因与解决方案

核心问题:张量浅拷贝导致引用指向同一对象

你执行pa = patches时,并没有创建新的张量副本,只是让变量pa和patches指向内存中同一个张量实例。因此,后续对pa的修改本质上就是直接修改原张量patches的内容。这时候用torch.equal(pa, patches)对比,结果必然是True——因为它们本来就是同一个对象。

验证替换成功的正确方式

方式1:创建原张量的独立副本后修改

通过clone()方法创建原张量的深拷贝,这样副本和原张量是完全独立的对象,修改副本后对比两者就能验证替换效果:

# 创建原张量的深拷贝
pa = patches.clone()
# 执行替换操作
batch_range = torch.arange(batch, device=device)[:, None]
pa[batch_range, masked_indices, :] = pred_pixel_values
# 此时对比pa和原patches,若替换有效则返回False
print(torch.equal(pa, patches))

方式2:直接修改原张量,验证目标位置的数值匹配

如果不需要保留原张量,可以直接修改它,然后针对性验证被mask位置的数值是否与预测值一致:

# 直接修改原张量
batch_range = torch.arange(batch, device=device)[:, None]
patches[batch_range, masked_indices, :] = pred_pixel_values
# 验证目标位置的数值是否与预测值匹配(用allclose处理浮点精度问题)
print(torch.allclose(patches[batch_range, masked_indices, :], pred_pixel_values))

内容的提问来源于stack exchange,提问作者S.EB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:37:34