Создавайте однородные графики с помощью библиотеки dgl (Deep Graph Library)

Опубликовано: 13 Декабря, 2022

В этой статье мы создадим однородные графы, используя библиотеку dgl (Deep Graph Library). Графы — это не что иное, как набор узлов/вершин и ребер. Кроме того, ребра — это не что иное, как исходные узлы для узлов назначения. Таким образом, все ребра могут быть представлены как (U, V), где U и V — узлы.

G = (V, E)

Требуется пакет

pip install dgl

Что такое библиотека Deep Graph (DGL) в Python?

Библиотека Deep Graph (DGL) — это библиотека Python с открытым исходным кодом, которая помогает исследователям и ученым быстро создавать, обучать и оценивать GNN на своих наборах данных. Это фреймворк-агностик . Создавайте свои модели с помощью PyTorch, TensorFlow или Apache MXNet.

Однородные однонаправленные графы

Ориентированные графы — это графы, имеющие направленные ребра между узлами. Если направленная реберная точка находится от u к v, то v смежна с u, а u смежна с v. В ориентированном графе ребра имеют направления и обозначены стрелкой на ребре. Создание однонаправленного графа, как показано ниже:

Пример:

Данные для построения графика, который имеет вид (U, V). (U[i],V[i]) образует ребро с номером i в графе. Допустимые форматы данных — тензорные. Каждый тензор должен быть одномерным тензором, содержащим идентификаторы узлов. Так что мы получаем узлы и ребра. Итак, здесь ребра равны 0,1 ; 0,2 ; 0,4 ; 1,2 ; 1,3 ; 2,3 ; 2,4 ; 3,4.

Python3




import dgl
import torch
 
# source nodes
u = torch.tensor([0, 0, 0, 1, 1, 2, 2, 3])
# destination nodes
v = torch.tensor([1, 2, 4, 2, 3, 3, 4, 4])
 
# Tuple of tensors is passed as argument
mygraph = dgl.graph((u, v))
 
print(mygraph)

Выход:

Однородные двунаправленные графы

Ребра в двунаправленном графе связаны с обоими конечными направлениями, что делает их двунаправленными. В результате для обхода графа можно использовать любое направление. Граф двунаправленный, так как в нем есть стрелка. В данном примере можно перемещаться по графу как от узла А к узлу В, так и наоборот.

Пример:

Нужно сделать ребра для обоих направлений в двунаправленном графе. В этой ситуации может быть полезен dgl.to bidirected() , который создает новый граф с ребрами в обоих направлениях.

Выход: