web-dev-qa-db-ja.com

2つのトーチテンソルまたはマトリックスが等しいかどうかを確認する方法は?

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の代わりに何を使用する必要がありますか?

私は単に==で試しましたが、うまくいきません。

22
DavideChicco.it

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))
28
YuTse

以下のソリューションは私のために働いた:

torch.equal(tensorA, tensorB)

ドキュメント から:

2つのテンソルのサイズと要素が同じ場合はTrue、そうでない場合はFalse

10
Erik

浮動小数点数に共通する小さな精度の違いを無視したい場合はこれを試してください

torch.all(torch.lt(torch.abs(torch.add(tens_a, -tens_b)), 1e-12))
5
tworec

テンソルを比較するには、要素ごとに行うことができます:

_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())
_
0
prosti