Lua 如何检查两个Torch张量或矩阵是否相等?
我需要一个Torch命令来检查两个张量是否具有相同的内容,如果它们具有相同的内容,则返回TRUE 例如:Lua 如何检查两个Torch张量或矩阵是否相等?,lua,torch,Lua,Torch,我需要一个Torch命令来检查两个张量是否具有相同的内容,如果它们具有相同的内容,则返回TRUE 例如: local tens_a = torch.Tensor({9,8,7,6}); local tens_b = torch.Tensor({9,8,7,6}); if (tens_a EQUIVALENCE_COMMAND tens_b) then ... end 我应该在这个脚本中使用什么来代替EQUIVALENCE\u命令 我只是简单地尝试了==,但它不起作用 torch.eq(a,
local tens_a = torch.Tensor({9,8,7,6});
local tens_b = torch.Tensor({9,8,7,6});
if (tens_a EQUIVALENCE_COMMAND tens_b) then ... end
我应该在这个脚本中使用什么来代替EQUIVALENCE\u命令
我只是简单地尝试了==
,但它不起作用
torch.eq(a, b)
实现=
运算符,将a
中的每个元素与b
(如果b是值)或a
中的每个元素与其在b
中的对应元素(如果b
是张量)进行比较
来自@deltheil的备选方案:
torch.all(tens_a.eq(tens_b))
如果要忽略浮动中常见的小精度差异,请尝试此操作
torch.all(torch.lt(torch.abs(torch.add(tens_a, -tens_b)), 1e-12))
以下解决方案对我很有效:
torch.equal(tensorA, tensorB)
发件人:
True
如果两个张量具有相同的大小和元素,则False
否则
要比较张量,可以按元素进行:
torch.eq(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 1.], [4., 4.]]))
tensor([[True, False], [False, True]])
在元素方面:
torch.eq(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 1.], [4., 4.]]))
tensor([[True, False], [False, True]])
或者对于整个张量:
torch.equal(torch.tensor([[1., 2.], [3, 4.]]), torch.tensor([[1., 1.], [4., 4.]]))
# False
torch.equal(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 2.], [3., 4.]]))
# True
但是,你可能会迷失方向,因为在某个时刻,有些细微的差异你会想忽略掉。例如浮动代码<代码> 1 和<代码> 1 000000000×1 /代码>非常接近,您可以认为它们是相等的。因为你有这样的比较
在某些情况下,检查元素数量是否与元素总数相等可能很重要。如果您有两个张量dt1
和dt2
,则将dt1
的元素数作为dt1.neelement()
用这个公式你可以得到百分比:
print(torch.sum(torch.eq(dt1, dt2)).item()/dt1.nelement())
您可以将两个张量转换为numpy数组:
local tens_a = torch.Tensor((9,8,7,6));
local tens_b = torch.Tensor((9,8,7,6));
a=tens_a.numpy()
b=tens_b.numpy()
然后像
np.sum(a==b)
4
将给你一个相当好的关于它们如何相等的概念。要获得最终的布尔值,你还需要使用
torch.all(torch.eq(tens_a,tens_b))
或者更简单的torch.all(tens_a:eq(tens_b))
@YuTse我让你用torch.all
更新你的答案。在PyTorch中,它是torch.eq(tens_a,tens_b)。all()
@fabian789是正确的:至少在PyTorch 0.4模块中,“torch”没有属性“all”。@neta777因此末尾的t.all()
要允许浮点差异,请参阅。或者,您可以使用.torch.allclose()是我一直在寻找的一个。如何不等于?这个答案应该是这个问题唯一使用的答案,因为这个函数匹配OP+想要的确切行为。它是最有效的,如果张量不是相同的形状,则不进行计算。