当前位置:网站首页>Some understandings of heterogeneous graphs in DGL and the usage of heterogeneous graph convolution heterographconv
Some understandings of heterogeneous graphs in DGL and the usage of heterogeneous graph convolution heterographconv
2022-07-05 10:46:00 【Icy Hunter】
List of articles
Heterogeneous graph
Compared with isomorphic graphs , Heterogeneous graphs can have different types of nodes and edges . These different types of nodes and edges have independent properties ID Space and features . For example, in the figure below ,” user ” and ” game ” Node ID from 0 At the beginning , And the two nodes have different characteristics .
Therefore, heterogeneous graph is the most able to express and apply all kinds of expressions of our real world .
You can use DGL Create a heterogeneous diagram as follows :

There are three entities , Heterogeneous graph of three relationships
import dgl
g = dgl.heterograph({
('user', 'follows', 'user') : ([0, 1], [1, 2]),
('user', 'plays', 'game') : ([0], [1]),
('store', 'sells', 'game') :([0], [2])})
print(g)
Output results :
Graph(num_nodes={
'game': 3, 'store': 1, 'user': 3},
num_edges={
('store', 'sells', 'game'): 1, ('user', 'follows', 'user'): 2, ('user', 'plays', 'game'): 1},
metagraph=[('store', 'game', 'sells'), ('user', 'user', 'follows'), ('user', 'game', 'plays')])
DGL There are many ways to create heterogeneous diagrams in , The above description is created in a way similar to triples
for example (‘store’, ‘sells’, ‘game’), Refer to store Point to game Of sells Relationship ,([0], [2]) Means store_0 To game_2 One way sells Relationship , Therefore, the message can only be transmitted from game_2 to sells to update .
although game_0 Not used in the figure , But he will create by default .
From the above heterogeneous graph output, we can see that there are 7 Nodes ,3 Kind of relationship , In line with expectations .
Here are some operations on heterogeneous graphs
print(g.etypes) # Get the type of edge
print(g.ntypes) # Gets the type of the node
print(g.number_of_nodes('user')) # obtain user Number of nodes
print(g.metagraph().edges()) # Get binary
print(g.nodes('user')) # see user Node number
g.nodes['user'].data['HP'] = th.ones(3, 1) # Set up / obtain "user" Type of node "HP" features
print(g.nodes['user'].data['HP'][0]) # obtain "user"0 Type of node "HP" features
g.edges['sells'].data['money'] = th.zeros(1, 2) # Set up / obtain "sells" Type of edge "money" features
print(g.edges['sells'].data['money'][0]) # obtain "sells" Type edge 0 Of "money" features
hg = dgl.to_homogeneous(g) # Transform heterogeneous graphs into isomorphic graphs
print(hg.ndata[dgl.NTYPE]) # Original node type
print(hg.ndata[dgl.NID]) # The original node of a specific type ID
print(hg.edata[dgl.ETYPE]) # Original edge type
print(hg.edata[dgl.EID]) # The original specific type of edge ID
HeteroGraphConv
The convolution of irregular graphs applies submodules on their association graphs , Read the feature from the source node and write the updated feature to the target node . If multiple relationships have the same target node type , Then their results will be aggregated through the specified method . If the graph has no edges , The corresponding module will not be called .
Because for the convolution of heterogeneous graphs , There are different types of edges , Then each type of edge needs to set its own parameters , Parameters cannot be shared like isomorphic graphs .
initialization
import dgl.nn.pytorch as dglnn
dglnn.HeteroGraphConv(mods, aggregate='sum')
You need to pass in two parameters , first mods It's a dictionary type , The content is { Relationship name : The model layer , }
The second is the aggregate function , Default sum, Because there may be multiple edges gathering information from a total node , Aggregate information updating node information requires aggregate functions to play a role .
forward
forward(g, inputs, mod_args=None, mod_kwargs=None)
forward There are four parameters that can be entered ,mod_args and mod_kwargs The default can be
g Represents the input graph data
inputs It's also a dictionary type , Represents the characteristics of the input node
Example

Use the above heterogeneous graph to convolute the heterogeneous graph
First, create a heterogeneous diagram :
import dgl
g = dgl.heterograph({
('user', 'follows', 'user') : ([0, 1], [1, 2]),
('user', 'plays', 'game') : ([0], [1]),
('store', 'sells', 'game') :([0], [2])})
print(g)
Then initialize the heterogeneous map convolution
# All three relationships are set as input 2 Dimension node feature output 3 Whitman's sign
import dgl.nn.pytorch as dglnn
conv = dglnn.HeteroGraphConv({
'follows' : dglnn.GraphConv(2, 3),
'plays' : dglnn.GraphConv(2, 3),
'sells' : dglnn.GraphConv(2, 3)},
aggregate='sum')
Then pass in the parameters to get the result :
import torch as th
h1 = {
'user' : th.ones((g.number_of_nodes('user'), 2)),
'game' : th.ones((g.number_of_nodes('game'), 2)),
'store' : th.ones((g.number_of_nodes('store'), 2))}
print(h1)
h2 = conv(g, h1)
print(h2)
print(h2.keys())
Output results :
{
'user': tensor([[1., 1.],
[1., 1.],
[1., 1.]]), 'game': tensor([[1., 1.],
[1., 1.],
[1., 1.]]), 'store': tensor([[1., 1.]])}
{
'game': tensor([[ 0.0000, 0.0000, 0.0000],
[ 0.6098, -1.0385, 0.2647],
[ 0.1339, 0.6426, -0.6454]], grad_fn=<SumBackward1>), 'user': tensor([[ 0.0000, 0.0000, 0.0000],
[ 1.0880, 0.2894, -0.8723],
[ 1.0880, 0.2894, -0.8723]], grad_fn=<SumBackward1>)}
dict_keys(['game', 'user'])
Only game and user Because these two types of nodes involve updating operations ,store Because there is no side pointing at him , There is no need to update, so there is no need to output the new features of the node .
Reference resources
https://docs.dgl.ai/guide_cn/graph-heterogeneous.html#guide-cn-graph-heterogeneous
https://docs.dgl.ai/generated/dgl.nn.pytorch.HeteroGraphConv.html#dgl.nn.pytorch.HeteroGraphConv
边栏推荐
- Taro进阶
- 九度 1480:最大上升子序列和(动态规划思想求最值)
- 2021 Shandong provincial competition question bank topic capture
- [vite] 1371 - develop vite plug-ins by hand
- LDAP概述
- QT implements JSON parsing
- Based on shengteng AI Aibi intelligence, we launched a digital solution for bank outlets to achieve full digital coverage of information from headquarters to outlets
- 爬虫(9) - Scrapy框架(1) | Scrapy 异步网络爬虫框架
- Buried point 111
- 数据类型、
猜你喜欢

【DNS】“Can‘t resolve host“ as non-root user, but works fine as root

The first product of Sepp power battery was officially launched

小红书自研KV存储架构如何实现万亿量级存储与跨云多活

Who is the "conscience" domestic brand?

Learning Note 6 - satellite positioning technology (Part 1)

2022鹏城杯web

SAP ui5 objectpagelayout control usage sharing
![C语言实现QQ聊天室小项目 [完整源码]](/img/4e/b3703ac864830d55c824e1b56c8f85.png)
C语言实现QQ聊天室小项目 [完整源码]
![[vite] 1371 - develop vite plug-ins by hand](/img/7f/84bba39965b4116f20b1cf8211f70a.png)
[vite] 1371 - develop vite plug-ins by hand

Review the whole process of the 5th Polkadot Hackathon entrepreneurship competition, and uncover the secrets of the winning projects!
随机推荐
Flink CDC cannot monitor MySQL logs. Have you ever encountered this problem?
【DNS】“Can‘t resolve host“ as non-root user, but works fine as root
Crawler (9) - scrape framework (1) | scrape asynchronous web crawler framework
重磅:国产IDE发布,由阿里研发,完全开源!
使用bat命令一键启动常用浏览器
Implementation of wechat applet bottom loading and pull-down refresh
Shortcut keys for vscode
Workmanager Learning one
2022年危险化学品经营单位主要负责人特种作业证考试题库及答案
数据库中的范式:第一范式,第二范式,第三范式
分享.NET 轻量级的ORM
csdn软件测试入门的测试基本流程
中职组网络安全2021年江苏省省赛题目5套题目环境+解析全有需要的私信我
Lazy loading scheme of pictures
Based on shengteng AI Yisa technology, it launched a full target structured solution for video images, reaching the industry-leading level
GBase 8c数据库如何查看登录用户的登录信息,如上一次登录认证通过的日期、时间和IP等信息?
Sqlserver regularly backup database and regularly kill database deadlock solution
Explanation of full vulnerability script of network security C module of secondary vocational group script containing 4 vulnerabilities
脚手架开发基础
GO项目实战 — Gorm格式化时间字段