pytorchのgather()関数

まず、公式ドキュメントへのリンクを提供します。

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に対応します。

おすすめ

転載: blog.csdn.net/leviopku/article/details/108735704