2つのテンソルのコンテンツが同じかどうかをチェックし、同じコンテンツの場合にTRUEを返すTorchコマンドが必要です。
例えば:
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_COMMAND
の代わりに何を使用する必要がありますか?
私は単に==
で試しましたが、うまくいきません。
https://github.com/torch/torch7/blob/master/doc/maths.md#torcheqa-b
torch.eq(a, b)
Aの各要素をb(bが数値の場合)またはaの各要素をbの対応する要素と比較する==演算子を実装します。
- 更新
@deltheilから
torch.all(torch.eq(tens_a, tens_b))
またはさらにシンプル
torch.all(tens_a:eq(tens_b))
浮動小数点数に共通する小さな精度の違いを無視したい場合はこれを試してください
torch.all(torch.lt(torch.abs(torch.add(tens_a, -tens_b)), 1e-12))
テンソルを比較するには、要素ごとに行うことができます:
_torch.eq
_ は要素単位です:
_torch.eq(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 1.], [4., 4.]]))
tensor([[True, False], [False, True]])
_
または _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
_
しかし、ある時点で無視したい小さな違いがあるため、失われる可能性があります。例えば、フロート_1.0
_と_1.0000000001
_はかなり近く、これらは等しいと考えるかもしれません。そのような比較では、 _torch.allclose
_ になります。
_torch.allclose(torch.tensor([[1., 2.], [3., 4.]]), torch.tensor([[1., 2.000000001], [3., 4.]]))
# True
_
ある時点で、要素の数と比較して、等しい要素の数を要素ごとにチェックすることが重要になる場合があります。 2つのテンソル_dt1
_および_dt2
_がある場合、dt1.nelement()
として_dt1
_の要素数を取得します
そして、この式を使用すると、パーセンテージを取得できます。
_print(torch.sum(torch.eq(dt1, dt2)).item()/dt1.nelement())
_