send_recv




「」」
すべてのエッジ>>>更新を介してすべてのノードを、メッセージを送信します。
DGLGraph.update_all(message_func =「デフォルト」、reduce_func =「デフォルト」、apply_node_func =「デフォルト」)

エッジにmessage_func --message機能
- reduce_funcは、ノード上の機能を低下させる
apply_node_func:ノード上の機能を適用します
「「」


『』 「
DGLGraph.send(エッジ=」__ ALL__」、message_func = 『デフォルト』)
エッジ:
INT:一方の端用いてエッジID
INTのペア:一方の縁部は、そのエンドポイントが使用して
反復可能にINT /テンソル:エッジID用いて複数のエッジ
INT反復可能な一対の/テンソルのペア:






'' '
DGLGraph.recv(V = '__ ALL__'、reduce_funcは= 'デフォルト'、apply_node_funcは= 'デフォルト'、インプレース=偽

'''

輸入警告
warnings.filterwarnings( "無視")
番目としてインポートトーチを
インポートDGL
グラム= dgl.DGLGraph()

g.add_nodes(3)
g.ndata [ "X"] = th.tensor([5]、[6]、[7])
g.add_edges([0,1] 、[1,2])
SRC = th.tensor([0])
DST = th.tensor([2])
g.add_edges(SRC、DST)
プリント( "NDATA"、g.ndata [ "X"])


DEF send_source(エッジ):

プリント( "SRC"、edges.src [ "X"]形状、edges.src [ "X"]。)#1源节点特征([2,1])
印刷( "DST"、縁.DST [ "X"]。形、edges.dst [ "X"])#1目标节点特征([2、1])


リターン{ "M":edges.src [ "X"]}

g.register_message_func(send_source)

''」
テンソルNdataが([5]、
[6ザ]、
[7.]])
SRC torch.Size([3 ,. 1])テンソル([5]、
[6ザ]、
[5.]])
torch.Size DST([3 ,. 1。])テンソル([6] ,.。
[7.]、
[7.]])

'' '




DEF simple_reduce(ノード):
印刷( "data_nodes"、nodes.data [ " X "])#ノード請求
すべての着信メッセージ特性プリント("メールボックス"nodes.mailbox [ " M "]。形、nodes.mailbox [" M「])#mailbox [2の第2の次元に沿ったスタックを含みます、 1 ,. 1]
印刷( "SUM"、nodes.mailbox [ "M"] SUM(1)。。)



リターン{ "X":nodes.mailbox [ "M"] SUM(1)}#行加算

G .register_reduce_func(simple_reduce)



g.send(g.edges())
g.recv(g.nodes())
を印刷( "Ndataが"、G.NDATA [


"X"]) ''」

data_nodesテンソル([[6]])
メールボックスtorch.Size([1,1,1])テンソル([[[5]]])
テンソル([[5]])
data_nodes テンソル([7])
ボックスtorch.Size([ 1、2、1])テンソル([[[6]、
[5]]])
テンソル([11])
NDATAテンソル([[0]、
[5]、
[11。

]])''」

おすすめ

転載: www.cnblogs.com/hapyygril/p/11586319.html