1. ホーム
  2. python

[解決済み] PyTorchでベクトルのノルム、1-ノルム、2-ノルムを計算する正しい方法は何ですか?

2022-02-26 03:03:36

質問

行列があります。

t = torch.rand(2,3)
print(t)
>>>tensor([[0.5164, 0.3651, 0.0882],
        [0.4488, 0.9824, 0.4067]])

以下略 これ の入門編で、PyTorchで試してみたいと思っています。

のような気がする。

  • norm ベクトルの大きさまたは長さは、空間におけるベクトルの範囲を表す非負の数であり、ベクトルの大きさまたはノルムと呼ばれることもあります。
  • 1-Norm は、ベクトルの絶対値の和です。スカラーの絶対値は|a1|という表記を用います。事実上、ノルムはベクトル空間の原点からのマンハッタン距離の計算である"。
  • 2-Norm は、"ベクトル空間の原点からのベクトル座標の距離です。L2ノルムは、ベクトル値の二乗和の平方根として計算されます"

現在、これしか知りません。

print(torch.linalg.norm(t, dim=1))
>>>tensor([0.6385, 1.1541])

の3つ(ノルム、1-ノルム、2-ノルム)のうち、どれがノルムなのかがわからないのですが。 ここで を計算し、残りをどう計算するか。

解き方は?

0-、1-、2-ノルムを計算するには、以下のいずれかの方法をとります。 torch.linalg.norm を提供します。 ord 引数( 0 , 1 および 2 それぞれ)。あるいは直接テンソル上で Tensor.norm を使用すると p 引数で指定します。以下は3つのバリエーションです: 手動で計算され、引数が torch.linalg.normTensor.norm .

  • 0-ノルム

    >>> x.norm(dim=1, p=0)
    >>> torch.linalg.norm(x, dim=1, ord=0)
    >>> x.ne(0).sum(dim=1)
    
    
  • 1-ノルム

    >>> x.norm(dim=1, p=1)
    >>> torch.linalg.norm(x, dim=1, ord=1)
    >>> x.abs().sum(dim=1)
    
    
  • 2-ノルム

    >>> x.norm(dim=1, p=2)
    >>> torch.linalg.norm(x, dim=1, ord=2)
    >>> x.pow(2).sum(dim=1).sqrt()