まず、公式ドキュメントへのリンクを提供します。
https://pytorch.org/docs/stable/generated/torch.gather.html?highlight=gather#torch.gather
それから、私は公用語を使って公式文書を翻訳します。
名前が示すように、集まり、集まりなさい。これは、軍事訓練の待ち行列に似ており、インストラクターが望む順序でチームを配置します。
より適切な類推があります。収集の役割はインデックスに基づいて検索することであり、検索結果はテンソル行列の形式で返されます。
1.テンソルを取得します。
import torch
a = torch.arange(15).view(3, 5)
a = tensor([
[0、1、2、3、4]、
[5、6、7、8、9]、
[10、11、12、13、14]])
2.検索ルールを生成します。
(テンソルbの要素はすべてテンソルaに対応するインデックスです)
b = torch.zeros_like(a)
b[1][2] = 1
b[0][0] = 1
b =テンソル(
[[1、0、0、0、0]、
[0、0、1、0、0]、
[0、0、0、0、0]])
3.ディメンションdimに従って検索を開始します。
c = a.gather(0, b) # dim=0
d = a.gather(1, b) # dim=1
c = tensor([
[5、1、2、3、4]、
[0、1、7、3、4]、
[0、1、2、3、4]])
d = tensor([
[1、0、0、0、0]、
[ 5、5、6、5、5]、[
10、10、10、10、10]])
わかりました、ここでは少しわかりにくいでしょう。
dim = 0の場合、bはaに相対的であり、0番目の次元のインデックスを格納します。
dim = 1の場合、bはaに相対的であり、最初の次元のインデックスを格納します。
私は栗、ときましょう薄暗い= 0、の要素bは[ 0 ] [0]が1、それは見つけたいの要素を[ 0 ] [ 1 ];
dim = 1の場合、b [0] [ 0 ] の要素は1であるため、a [ 1 ] [ 0 ] 内の要素を検索します。
最終出力はaに対するクエリと見なすことができます。つまり、要素はすべてaの要素であり、クエリインデックスはbに格納されます。出力サイズはbと同じです。
説明するネットワークダイアグラムを検索します。ここで、インデックスはbに対応し、srcはaに対応し、グリッド内の値はすべて1削減されます。左の画像はdim = 0に対応し、右の画像はdim = 1に対応します。