我需要一个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
Run Code Online (Sandbox Code Playgroud)
我应该在这个脚本中使用什么而不是EQUIVALENCE_COMMAND?
我试过简单,==但它不起作用.
YuT*_*Tse 34
https://github.com/torch/torch7/blob/master/doc/maths.md#torcheqa-b
torch.eq(a, b)
Run Code Online (Sandbox Code Playgroud)
实现==运算符比较a中的每个元素b(如果b是数字)或b中的每个元素与b中的对应元素.
--update
来自@deltheil
torch.all(torch.eq(tens_a, tens_b))
Run Code Online (Sandbox Code Playgroud)
甚至更简单
torch.all(tens_a:eq(tens_b))
Run Code Online (Sandbox Code Playgroud)
pro*_*sti 15
要比较张量,您可以明智地执行元素:
torch.eq 是元素明智的:
torch.eq(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 1.], [4., 4.]]))
tensor([[True, False], [False, True]])
Run Code Online (Sandbox Code Playgroud)
或者torch.equal对于整个张量:
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
Run Code Online (Sandbox Code Playgroud)
但是你可能会迷失方向,因为在某些时候你会想忽略一些小的差异。例如浮动1.0并且1.0000000001非常接近,您可能认为它们是相等的。对于那种比较,你有torch.allclose。
torch.allclose(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 2.000000001], [3., 4.]]))
# True
Run Code Online (Sandbox Code Playgroud)
在某些时候,与元素的全部数量相比,明智地检查元素有多少元素相等可能很重要。如果你有两个张量dt1并且dt2你得到的元素数量dt1为dt1.nelement()
用这个公式你可以得到百分比:
print(torch.sum(torch.eq(dt1, dt2)).item()/dt1.nelement())
Run Code Online (Sandbox Code Playgroud)
小智 14
下面的解决方案为我工作:
torch.equal(tensorA, tensorB)
Run Code Online (Sandbox Code Playgroud)
从文档中:
True如果两个张量具有相同的大小和元素,False否则。
如果要忽略浮点数常见的微小精度差异,请尝试此操作
torch.all(torch.lt(torch.abs(torch.add(tens_a, -tens_b)), 1e-12))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24542 次 |
| 最近记录: |