Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 如何检查两个Torch张量或矩阵是否相等?_Lua_Torch - Fatal编程技术网

Lua 如何检查两个Torch张量或矩阵是否相等?

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,

我需要一个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, 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+想要的确切行为。它是最有效的,如果张量不是相同的形状,则不进行计算。