最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于torch.scatter與torch_scatter庫(kù)的使用整理

 更新時(shí)間:2023年09月11日 14:36:18   作者:回爐重造P  
這篇文章主要介紹了關(guān)于torch.scatter與torch_scatter庫(kù)的使用整理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

最近在做圖結(jié)構(gòu)相關(guān)的算法,scatter能把鄰接矩陣?yán)锏男畔⑿薷?,或者把鄰居分組算個(gè)sum或者reduce,挺方便的,簡(jiǎn)單整理一下。

torch.scatter 與 tensor._scatter

Pytorch自帶的函數(shù),用來將作為 src 的tensor根據(jù) index 的描述填充到 input 中,

形式如下:

ouput = torch.scatter(input, dim, index, src)
# 或者是
input.scatter_(dim, index, src)

兩個(gè)方法的功能是相同的,而帶下劃線的 _scatter 方法是將原tensor input 直接修改了,不帶的則會(huì)返回一個(gè)新的tensor output , input 不變。

其中 dim 決定 index 對(duì)應(yīng)值是沿著哪個(gè)維度進(jìn)行修改。而 src 為數(shù)據(jù)來源,當(dāng)其為tensor張量時(shí),shape要和index相同,這樣index中每個(gè)元素都能對(duì)應(yīng) src 中對(duì)應(yīng)位置的信息。

理解 scatter 方法主要是要理解 index 實(shí)現(xiàn)的 src input 之間的位置對(duì)應(yīng)關(guān)系,舉個(gè)例子:

dim = 0
index = torch.tensor(
	[[0, 2, 2], 
	[2, 1, 0]]
)

dim 為0時(shí),遵循的映射原則為: input[index[i][j]][j] = src[i][j] .

也就是說,將位置 (i, j) 中 dim 對(duì)應(yīng)的位置改為 index[i][j] 的值。

如位置(1,0),index[1][0]為2,則映射后的位置為(2,0),意味著 input 中(2,0)的位置被更改為 src 中(1,0)位置的值。

我個(gè)人形象理解是這些值會(huì)沿著dim方向滑動(dòng),上面例子中src[1][0]位置的值滑到2,成為input中的新值,這樣理解起來更形象一點(diǎn)。

基本理解了上面這個(gè)例子,多維情況和不同dim的情況都可以類推了。

需要注意:src和input的dtype需要相同,不然會(huì)報(bào)

Expected self.dtype to be equal to src.dtype

不一樣就先轉(zhuǎn)換再使用。

t = torch.arange(6).view(2, 3)
t = t.to(torch.float32)
print(t)
output = torch.scatter(torch.zeros((3, 3)), 0, torch.tensor([[0, 2, 2], [2, 1, 0]]), t)
print(torch.zeros((3, 3)).scatter_(0, torch.tensor([[0, 2, 2], [2, 1, 0]]), t))

輸出:

tensor([[0., 1., 2.],
        [3., 4., 5.]])
tensor([[0., 0., 5.],
        [0., 4., 0.],
        [3., 1., 2.]])

torch_scatter庫(kù)

這個(gè)第三方庫(kù)對(duì)矩陣的分組處理這個(gè)概念做了更進(jìn)一步的封裝,通過index來指定分組信息,將元素分組后進(jìn)行對(duì)應(yīng)處理,

最基礎(chǔ)的scatter方法形式如下:

torch_scatter.scatter(src, index, dim, out, dim_size, reduce)
  • src : 數(shù)據(jù)源
  • index :分組序列
  • dim :分組遵循的維度
  • out :輸出的tensor,可以不指定直接讓函數(shù)輸出
  • dim_size :out不指定的時(shí)候,將輸出shape變?yōu)樵撝荡笮。籨im_size也不指定,就根據(jù)計(jì)算結(jié)果來
  • reduce :分組的操作,包括sum,mul,mean,min和max操作

這個(gè)方法理解關(guān)鍵在 index 的分組方法,

舉個(gè)例子:

dim = 1
index = torch.tensor([[0, 1, 1]])

torch_scatter.scatter 對(duì) index 的順序是沒有特定規(guī)定的,相同數(shù)字對(duì)應(yīng)的元素即為一組。

比如例子中,維度1上的第0個(gè)元素為一組,第1和2元素為另一組。

這樣,按照分組進(jìn)行reduce定義的計(jì)算即可獲得輸出。如:

t = torch.arange(12).view(4, 3)
print(t)
t_s = torch_scatter.scatter(t, torch.tensor([[0, 1, 1]]), dim=1, reduce='sum')
print(t_s)

輸出:

tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
tensor([[ 0,  3],
        [ 3,  9],
        [ 6, 15]])

可以看出,每行的后兩個(gè)元素求了和,與index定義相同。

要注意的是,index的 shape[0] 為1時(shí),會(huì)自動(dòng)對(duì)dim對(duì)應(yīng)的維度上每一層進(jìn)行相同的分組處理,如上例所示,index大小為(1, 3),即對(duì)src的三行數(shù)據(jù)都進(jìn)行了分組處理。

而另一種分組方式,如需要每行分組不同,則需要index的shape和src的shape相同,如下例:

t = torch.arange(12).view(4, 3)
print(t)
t_s = torch_scatter.scatter(t, torch.tensor([[0, 1, 1], [1, 1, 0], [0, 1, 1], [1, 1, 0]]), dim=1, reduce='sum')
print(t_s)

輸出:

tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
tensor([[ 0,  3],
        [ 5,  7],
        [ 6, 15]])

shape不相同時(shí),則會(huì)報(bào)錯(cuò)提示:

RuntimeError: The expanded size of the tensor (3) must match the existing size (2) at non-singleton dimension 0 .

同時(shí),該庫(kù)還給出了另外兩種方法,分別為 torch_scatter.segment_coo torch_scatter.segment_csr .

torch_scatter.segment_coo

torch_scatter.segment_coo scatter 的功能差不多,但它只支持index的shape[0]為1的狀態(tài),即每一行都為相同的分組方式。

同時(shí),index中數(shù)值為順序排列,以提高計(jì)算速度。

torch_scatter.segment_csr

torch_scatter.segment_csr 的index格式不太相同,是一種區(qū)間格式,如[0, 2, 5],表示0,1為一組,2,3,4為一組,即取數(shù)值間的左閉右開區(qū)間。

這個(gè)方法是計(jì)算速度最快的。

官方文檔地址

torch_scatter庫(kù)doc

https://pytorch-scatter.readthedocs.io/en/latest/functions/scatter.html

torch.scatter文檔

https://pytorch-cn.readthedocs.io/zh/latest/package_references/Tensor/#scatter_input-dim-index-src-tensor

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas中數(shù)據(jù)表合并的幾種實(shí)現(xiàn)方法

    Pandas中數(shù)據(jù)表合并的幾種實(shí)現(xiàn)方法

    Pandas提供了merge()、concat()和join()三種方法來合并數(shù)據(jù)表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • python3使用tkinter實(shí)現(xiàn)ui界面簡(jiǎn)單實(shí)例

    python3使用tkinter實(shí)現(xiàn)ui界面簡(jiǎn)單實(shí)例

    使用tkinter創(chuàng)建一個(gè)小窗口,布置2個(gè)按鈕,一個(gè)btn關(guān)閉窗口,另一個(gè)btn用于切換執(zhí)行傳入的2個(gè)函數(shù),簡(jiǎn)單的小代碼,大家參考使用吧
    2014-01-01
  • 如何用GAN訓(xùn)練自己的數(shù)據(jù)生成新的圖片

    如何用GAN訓(xùn)練自己的數(shù)據(jù)生成新的圖片

    這篇文章主要介紹了如何用GAN訓(xùn)練自己的數(shù)據(jù)生成新的圖片問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python操作redis數(shù)據(jù)庫(kù)的三種方法

    python操作redis數(shù)據(jù)庫(kù)的三種方法

    這篇文章主要介紹了python操作redis數(shù)據(jù)庫(kù)的三種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • python編寫根據(jù)年份判斷生肖實(shí)例

    python編寫根據(jù)年份判斷生肖實(shí)例

    這篇文章主要為大家介紹了python編寫根據(jù)年份判斷生肖實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 一文詳解Python中的super?函數(shù)

    一文詳解Python中的super?函數(shù)

    這篇文章主要介紹了一文了解Python中的super?函數(shù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • Python實(shí)現(xiàn)的連接mssql數(shù)據(jù)庫(kù)操作示例

    Python實(shí)現(xiàn)的連接mssql數(shù)據(jù)庫(kù)操作示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的連接mssql數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式分析了Python安裝pymssql模塊以及基于pymssql模塊連接sql2008 R2數(shù)據(jù)庫(kù)的具體操作技巧,需要的朋友可以參考下
    2018-08-08
  • Python自定義函數(shù)定義,參數(shù),調(diào)用代碼解析

    Python自定義函數(shù)定義,參數(shù),調(diào)用代碼解析

    這篇文章主要介紹了Python自定義函數(shù)定義,參數(shù),調(diào)用代碼解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 一文詳細(xì)介紹Python中pkl格式文件

    一文詳細(xì)介紹Python中pkl格式文件

    .pkl文件是Python中用于存儲(chǔ)對(duì)象的文件格式,全稱是"pickle",它是Python標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,用于將Python對(duì)象序列化,以便于在不同的Python程序之間進(jìn)行傳輸或存儲(chǔ),這篇文章主要給大家介紹了如何通過一文詳細(xì)介紹Python中pkl格式文件的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 關(guān)于Python字典的底層實(shí)現(xiàn)原理

    關(guān)于Python字典的底層實(shí)現(xiàn)原理

    這篇文章主要介紹了關(guān)于Python字典的底層實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論

哈巴河县| 临西县| 沁阳市| 前郭尔| 巴东县| 信阳市| 达尔| 石泉县| 长寿区| 佛坪县| 定安县| 东乡族自治县| 南汇区| 武清区| 岳池县| 永年县| 榆中县| 洛南县| 稷山县| 湟中县| 巨鹿县| 修武县| 斗六市| 博兴县| 瑞金市| 巫山县| 班玛县| 台南市| 晋州市| 敦化市| 海林市| 台湾省| 凭祥市| 大方县| 峨眉山市| 昌吉市| 孝昌县| 桐梓县| 会泽县| 武强县| 壤塘县|