GNN學(xué)習(xí) 【01】——DGL

學(xué)習(xí)內(nèi)容:DGL - Get Started

討論問題

1. 如何借助networkx創(chuàng)建dgl圖袱衷?如何直接創(chuàng)建dgl圖

networkx可以將圖形可視化。

借助networkx創(chuàng)建dgl圖

import networkx as nx
import dgl

g_nx = nx.petersen_graph()
g_dgl = dgl.DGLGraph(g_nx)

直接創(chuàng)建dgl圖

import dgl
g = dgl.DGLGraph()
2. 如何添加結(jié)點和邊牛欢?

添加結(jié)點:

# add 34 nodes into the graph; nodes are labeled from 0~33
    g.add_nodes(34)

添加邊:
邊緣在DGL是有方向的,讓邊具有雙向性

# add edges two lists of nodes: src and dst
src, dst = tuple(zip(*edge_list))
g.add_edges(src, dst)
# edges are directional in DGL; make them bi-directional
g.add_edges(dst, src)
3. 如何訪問結(jié)點的屬性嘁扼?
# access node set with integer, list, or integer tensor
g.nodes[0].data['x'] = th.zeros(1, 3)
g.nodes[[0, 1, 2]].data['x'] = th.zeros(3, 3)
g.nodes[th.tensor([0, 1, 2])].data['x'] = th.zeros(3, 3)
4. 訪問邊的屬性有哪兩種方法拷肌?
g.edata['w'] = th.randn(9, 2)

# access edge set with IDs in integer, list, or integer tensor
g.edges[1].data['w'] = th.randn(1, 2)
g.edges[[0, 1, 2]].data['w'] = th.zeros(3, 2)
g.edges[th.tensor([0, 1, 2])].data['w'] = th.zeros(3, 2)

# one can also access the edges by giving endpoints
g.edges[1, 0].data['w'] = th.ones(1, 2)                 # edge 1 -> 0
g.edges[[1, 2, 3], [0, 0, 0]].data['w'] = th.ones(3, 2) # edges [1, 2, 3] -> 0
5. 邊和點的屬性用什么數(shù)據(jù)結(jié)構(gòu)進(jìn)行存貯?邊和點屬性對應(yīng)的scheme包含哪些信息娜亿?

用字典來進(jìn)行存貯

#After assignments, each node/edge field will be associated with a scheme containing the shape and data type (dtype) of its field value.
print(g.node_attr_schemes())
g.ndata['x'] = th.zeros((10, 4))
print(g.node_attr_schemes())

對應(yīng)的scheme包含了形狀和數(shù)據(jù)類型

#Out:
{'x': Scheme(shape=(3,), dtype=torch.float32)}
{'x': Scheme(shape=(4,), dtype=torch.float32)}

6. 如何刪除邊或節(jié)點的屬性丽已?

#One can also remove node/edge states from the graph. This is particularly useful to save memory during inference.
g.ndata.pop('x')
g.edata.pop('w')
7. 什么叫multi graph。請舉出一個現(xiàn)實的例子

Multigraphs ~~~ Many graph applications need multi-edges.
許多圖的應(yīng)用都需要多邊买决。
構(gòu)造類:DGLGraph with multigraph=True
實際例子:
1沛婴、地圖,兩個地點之間在地圖上可能會有不同的路徑督赤。
2嘁灯、同學(xué)之間的關(guān)系:兩個同學(xué)可能有合作關(guān)系,合作論文躲舌,互相做實驗丑婿,但是做的事情是不同的。

8. 在dgl庫中没卸,messagereduce分別完成什么功能羹奉?

首先,我們使用DGL的內(nèi)置函數(shù)定義消息傳遞:
使用源節(jié)點“h”作為信息傳遞

def gcn_message(edges):
    # The argument is a batch of edges.
    # This computes a (batch of) message called 'msg' using the source node's feature 'h'.
    return {'msg' : edges.src['h']}

定義消息累和函數(shù)约计。

def gcn_reduce(nodes):
    # The argument is a batch of nodes.
    # This computes the new 'h' features by summing received 'msg' in each node's mailbox.
    return {'h' : torch.sum(nodes.mailbox['msg'], dim=1)}

9. 說明send诀拭, recv, update_all, copy_src的功能煤蚌。

發(fā)送消息到所有邊

def pagerank_naive(g):
    # Phase #1: send out messages along all edges.
    for u, v in zip(*g.edges()):
        g.send((u, v))

接受消息來計算新的頁面排名的值

    # Phase #2: receive messages to compute new PageRank values.
    for v in g.nodes():
        g.recv(v)

通過所有的邊來獲取消息并更新所有的節(jié)點

def pagerank_level2(g):
    g.update_all()

利用源結(jié)點的特征屬性來計算輸出

dgl.function.copy_src(src, out) is an edge UDF that computes the output using the source node feature data.
10. 使用builtin函數(shù)有什么好處耕挨?

使用內(nèi)置函數(shù)的好處是:使用內(nèi)置函數(shù)细卧,比普通的Python實現(xiàn),速度要快一倍左右筒占。 代碼簡潔贪庙,提升性能。

11. 例子

Batched Graph Classification with DGL
Classifier.forward()中翰苫,設(shè)隱層1節(jié)點數(shù)為256止邮,隱層2節(jié)點數(shù)為266。輸入層節(jié)點為1革骨,對應(yīng)一個graph农尖,輸出層 節(jié)點為8,對應(yīng)8個類別良哲。一個batch的大小為32,圖的節(jié)點數(shù)為400筑凫。經(jīng)過以下變換后滑沧,h的維度是多少巍实?

  1. 調(diào)用 g.update_all 之前 :1
  1. g.update_all 之后 :1
  1. 經(jīng)過線性變換之后:256
  1. 再次調(diào)用g.update_all 之后 :256
  1. 再次經(jīng)過線性變換之后:266
  1. 調(diào)用dgl.mean_nodes之后 :266
  1. 調(diào)用classify之后:8
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棚潦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丸边,老刑警劉巖叠必,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妹窖,居然都是意外死亡纬朝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門骄呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來共苛,“玉大人,你說我怎么就攤上這事蜓萄∮缇ィ” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵嫉沽,是天一觀的道長患膛。 經(jīng)常有香客問我,道長耻蛇,這世上最難降的妖魔是什么踪蹬? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮臣咖,結(jié)果婚禮上跃捣,老公的妹妹穿的比我還像新娘。我一直安慰自己夺蛇,他們只是感情好疚漆,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刁赦,像睡著了一般娶聘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甚脉,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天丸升,我揣著相機(jī)與錄音,去河邊找鬼牺氨。 笑死狡耻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猴凹。 我是一名探鬼主播夷狰,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼郊霎!你這毒婦竟也來了沼头?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤书劝,失蹤者是張志新(化名)和其女友劉穎进倍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庄撮,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡背捌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洞斯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毡庆。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烙如,靈堂內(nèi)的尸體忽然破棺而出么抗,到底是詐尸還是另有隱情,我是刑警寧澤亚铁,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布蝇刀,位于F島的核電站徘溢,受9級特大地震影響捆探,放射性物質(zhì)發(fā)生泄漏黍图。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一助被、第九天 我趴在偏房一處隱蔽的房頂上張望切诀。 院中可真熱鬧,春花似錦丰滑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至认臊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剧腻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工书在, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留拆又,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓栈源,卻偏偏與公主長得像竖般,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359