DGL学习笔记02-Graph

索引

  • 1.2 Graphs、Nodes and Edges
  • 1.3 Node and Edge Features
  • 1.4 Creating Graphs from External Sources
    • 占个位,下次再写

1.2 Graphs、Nodes and Edges

这一小节对应官方文档的1.2节,主要是介绍图的基本概念以及如何创建图,其实在DGL学习笔记01我们已经学过了,不过为了完整还是再撸一次。

DGL学习笔记02-Graph_第1张图片
首先由这么一张图,注意这是一个有向图,接下来我们用代码创建它

import torch
import dgl

u = torch.tensor([0, 0, 0, 1])
v = torch.tensor([1, 2, 3, 3])

g = dgl.graph((u, v))

print("nodes: ",g.nodes())
print("edges: ", g.edges())

在这里插入图片描述
还可以将有向图转换成无向图

bg = dgl.to_bidirected(g)
print(bg.edges())

在这里插入图片描述

1.3 Node and Edge Features

1.2 节介绍了如何创建一个简单的图,但是没有给图的节点和边加上特征,1.3节就是介绍如何给节点和边加上特征。因为我们后面在进行训练的时候不仅仅需要邻接矩阵,还需要各个节点的特征。

首先先来创建一个6个结点,4条边的有向图
DGL学习笔记02-Graph_第2张图片

import torch
import dgl

g = dgl.graph(([0, 0, 1, 5],
               [1, 2, 2, 0]))  # 6个结点, 4条边
print(g)

DGL学习笔记02-Graph_第3张图片

接下来我们为每个结点赋一些特征,为了简洁用,就用三维就好。
DGL学习笔记02-Graph_第4张图片

node_feats = torch.tensor([[0, 1, 0],
                           [1, 1, 0],
                           [0, 1, 1],
                           [0, 0, 0],
                           [1, 0, 1],
                           [1, 1, 1]])
g.ndata['node_features'] = node_feats
print(g)
print(g.ndata['node_features'])

DGL学习笔记02-Graph_第5张图片
当然了,我们还可以给edges加上特征,这里我就偷个懒不画图了。

edge_features = torch.randn(g.number_of_edges(), 5)  # 使用pytrch 随机初始化边的特征,5维
g.edata['edge_features'] = edge_features  # 将边的特征加到graph对象里面
print(g)
print(g.edata['edge_features'])

DGL学习笔记02-Graph_第6张图片
有时候我们用到的图可能是加权图,那么我们可以将边的权重存在edata里面

weights = torch.tensor([0.3, 0.6, 0.45, 0.25])
g.edata['w'] = weights
print(g)

在这里插入图片描述

1.4 Creating Graphs from External Sources

这一小节主要是介绍通过外部源来创建Graph。
官网给出的教程是从Scipy的稀疏矩阵和networkx来创建graph,但是个人感觉这个不太常用,所以我就举个从csv文件创建的案例吧。

占个位,下次再写

你可能感兴趣的:(DGL学习笔记)