散布でPyTorchと使用を集めます

散布でPyTorchと使用を集めます

おしゃべり

久しぶりの更新ブログません、全体の2019が放棄された、しかし仕事のアルゴリズム香港を探していない、来年春のトレーニングを開始する準備ができて、何かを作るが、2019年の後半アウト真剣ソートにまだ準備ができていませんでした機械学習と学習の知識の彼らの深さについて学びます。

散布使い方

散布散布は、公式ウェブサイトが提供するpytorchの例を使用して、直感的にこのAPI関数を感じるために例をまず見ての、中国語に翻訳します。

import torch 
import torch.nn as nn
x = torch.rand(2,5)
x
tensor([[0.2656, 0.5364, 0.8568, 0.5845, 0.2289],
        [0.0010, 0.8101, 0.5491, 0.6514, 0.7295]])
y = torch.zeros(3,5)
index = torch.tensor([[0,1,2,0,0],[2,0,0,1,2]])
index
tensor([[0, 1, 2, 0, 0],
        [2, 0, 0, 1, 2]])
y.scatter_(dim=0,index=index,src=x)
y
tensor([[0.2656, 0.8101, 0.5491, 0.5845, 0.2289],
        [0.0000, 0.5364, 0.0000, 0.6514, 0.0000],
        [0.0010, 0.0000, 0.8568, 0.0000, 0.7295]])

まず、xの値の全てをyに表示され、索引付けされた軸DIM = 0であること、xは下記式の完全なマッピングから任意の要素である。見ることができます
Y [インデックス[I、J] 、j] = X [I、J]、 xの[0,1] = 0.5364、インデックス [0,1] = 1は、 この値は、yの最初の次元DIM = 0で表示されることを示ししたがってインデックス位置1、及び、yにおける[インデックス[0,1]、 1] = Y [1,1] = X [0,1] = 0.5364。

ここでは、散布、直感的な理解を持つ、すなわち、散乱関数に、指定した軸のDIMにマッピングされたマトリックスを、マッピングマトリックスへのインデックスに使用することができる持って、インデックスは、そう3次元テンソルのために、シャフトをマッピングするために指定しましたコールy.scatter_(薄暗い、インデックス、SRC)場合は、そこです。

y[index[i][j][k]][j][k] = src[i][j][k]  # if dim == 0
y[i][index[i][j][k]][k] = src[i][j][k]  # if dim == 1
y[i][j][index[i][j][k]] = src[i][j][k]  # if dim == 2

最後に、英語の説明の飛散に関する公式ドキュメントを見て:

Writes all values from the tensor src into self at the indices specified in the index tensor. For each value in src, its output index is specified by its index in src for dimension != dim and by the corresponding value in index for dimension = dim.

そして、ほぼ同じ機能がターゲットのsrcテンソル自己にマッピングすることができる手段直感的な感触は、次元dimに、インデックスが直接のSRCの値位置をインデックス化、非次元dimに、添字インデックスで与えられます。

(それはテンソルである場合)自己、インデックスおよびSRCは、次元の数が同じでなければなりません。また、全ての次元についてindex.size(D)<= src.size(d)はD、及びそのindex.size(D)<= self.size(d)のすべての次元dの!=薄暗いことが必要とされます。

当然自己インデックス、ndimのSRCは、さもなければ範囲外添字、ビューindex.size(D)> src.size(D)、index.size(D)> self.size(D)なしの点から式と同じでなければなりません問題は、アレイはSRCよりも大きくすることができ、インデックスは、ここでの推測では、インデックスは役に立たない、未使用のスペースがアクセスされることはありません、ここで配列srcのサイズを超えたため、プロジェクトを検討することです。

また、)(収集用として、インデックスの値が0とself.size(DIM)の間でなければなりません - 1包括し、指定次元dimに沿って一列のすべての値は一意でなければなりません。

インデックスニーズ[0、self.size(DIM) - 1]のすべての値の間隔、満たされなければならない、そうでない場合は、ラインを越え。2番目の文が次のコードを見て、私のテストの調査結果の結果を繰り返すことができ、薄暗い寸法ニーズの価値指標に沿ってすべてがユニークであることを言います:

x = torch.rand(2,5)
x
tensor([[0.6542, 0.6071, 0.7546, 0.4880, 0.1077],
        [0.9535, 0.0992, 0.0594, 0.0641, 0.7563]])
index = torch.tensor([[0,1,2,0,0],[2,0,0,1,2]])
y = torch.zeros(3,5)
y.scatter_(dim=0,index=index,src=x)
tensor([[0.6542, 0.0992, 0.0594, 0.4880, 0.1077],
        [0.0000, 0.6071, 0.0000, 0.0641, 0.0000],
        [0.9535, 0.0000, 0.7546, 0.0000, 0.7563]])
index = torch.tensor([[0,1,2,0,0],[0,1,2,0,0]])
y = torch.zeros(3,5)
y.scatter_(dim=0,index=index,src=x)
tensor([[0.9535, 0.0000, 0.0000, 0.0641, 0.7563],
        [0.0000, 0.0992, 0.0000, 0.0000, 0.0000],
        [0.0000, 0.0000, 0.0594, 0.0000, 0.0000]])

軸に沿って見ることができるが、5倍、つまり(0,0)、(1,1)、(2,2)、(0,0)、(0,0)を繰り返したDIM = 0、何コードが与えられていません警告は、単に元の値を上書きし、文書が更新されますが、更新APIされない場合があります。

params:

  • DIM(INT) - インデックスに沿った軸
  • インデックス(LongTensor) - 散乱する要素のインデックスは、いずれかの空またはSRCの同じサイズとすることができます。場合は、空の、操作がアイデンティティを返します
  • SRC(テンソル) - 散乱にソース要素(複数可)、包み値が指定されていません
  • 値(フロート) - 散乱にソース要素(単数または複数)は、包みSRCが指定されていません

これは、値パラメータは、SRCを指定していないとき、あなたは私たちがonehot機能の散布バージョンを達成するために使用する浮動小数点値の変数を、指定することができることは注目に値します。

x = torch.tensor([[1,1,1,1,1]],dtype=torch.float32)
index = torch.tensor([[0,1,2,3,4]],dtype=torch.int64)
y = torch.zeros(5,5,dtype=torch.float32)
x
tensor([[1., 1., 1., 1., 1.]])
y.scatter_(0,index,x)
tensor([[1., 0., 0., 0., 0.],
        [0., 1., 0., 0., 0.],
        [0., 0., 1., 0., 0.],
        [0., 0., 0., 1., 0.],
        [0., 0., 0., 0., 1.]])
y = torch.zeros(5,5,dtype=torch.float32)
y.scatter_(0,index,1)
tensor([[1., 0., 0., 0., 0.],
        [0., 1., 0., 0., 0.],
        [0., 0., 1., 0., 0.],
        [0., 0., 0., 1., 0.],
        [0., 0., 0., 0., 1.]])

我々は、[1,1,1,1,1]当=割り当てられる値= 1、及びSRCを見ることができます。こっちに散乱。

利用状況を収集

散布は、直感的な感覚を持っている例を参照して、別のテンソルテンソルからデータを収集する逆のプロセスで収集します。

x = torch.tensor([[1,2],[3,4]])
torch.gather(input=x,dim=1,index=torch.tensor([[0,0],[1,0]]))
tensor([[1, 1],
        [4, 3]])

次の式を指標に応じて、収集プロセスを推測し、Yに配置され、xの選択されたデータを暗く、満たすことができる:
Y [I、J] = X [I、インデックス[I、J]、従ってY [0,0] = X [0、インデックス[0,0] = X [0,0] = 1、Y [1,0] = X [1、インデックス[1,0] = X [1、 3Dデータのために1] = 4、満足下記式:

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0
out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1
out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2

ここでは、すべての後、散乱の逆散乱を理解し、収集された、ので、用法・プレゼンテーションが、終わって収集するためだ、多くの説明を必要としません集まります。

概要

  1. 散乱は、アプリケーションが機能onehotである、テンソルに他のテンソルをマッピングすることができます。
  2. 収集し、散布2つの相互のプロセスが、中央アフリカ0のまばらなコレクションのテンソル要素、まばらなテンソルを圧縮するために使用することができ集まります。
  3. 時間を無視しないで、結果は完全に自分自身を非難しないようにすることはできません。

おすすめ

転載: www.cnblogs.com/liuzhan709/p/11875743.html