开始使用

通过pip进行基本安装

您可以在PyPI上安装稳定版本:

$ pip install pygmtools

或通过运行以下命令获取最新版本:

$ pip install -U https://github.com/Thinklab-SJTU/pygmtools/archive/master.zip # with --user for user install (no root)

以下包是必需的,并将由pip自动安装:

Python >= 3.5
requests >= 2.25.1
scipy >= 1.4.1
Pillow >= 7.2.0
numpy >= 1.18.5
easydict >= 1.7
appdirs >= 1.4.4
tqdm >= 4.64.1

请注意,我们支持不同的深度学习架构 pytorch, paddle, jittor。您可以查看 Numerical Backends 了解不同后端的介绍和示例。

示例:使用numpy后端匹配同构图

这里我们提供了一个基本的示例,展示如何使用pygmtools的默认numpy后端来匹配两个同构图(即两个图具有相同的节点和边,但节点排列未知)。

步骤0:导入包并设置后端

>>> import numpy as np
>>> import pygmtools as pygm
>>> pygm.set_backend('numpy')
>>> np.random.seed(1)

步骤1:生成一批同构图

>>> batch_size = 3
>>> X_gt = np.zeros((batch_size, 4, 4))
>>> X_gt[:, np.arange(0, 4, dtype=np.int64), np.random.permutation(4)] = 1
>>> A1 = np.random.rand(batch_size, 4, 4)
>>> A2 = np.matmul(np.matmul(X_gt.transpose((0, 2, 1)), A1), X_gt)
>>> n1 = n2 = np.repeat([4], batch_size)

步骤2:构建亲和矩阵并选择一个亲和函数

>>> conn1, edge1, ne1 = pygm.utils.dense_to_sparse(A1)
>>> conn2, edge2, ne2 = pygm.utils.dense_to_sparse(A2)
>>> import functools
>>> gaussian_aff = functools.partial(pygm.utils.gaussian_aff_fn, sigma=1.) # set affinity function
>>> K = pygm.utils.build_aff_mat(None, edge1, conn1, None, edge2, conn2, n1, ne1, n2, ne2, edge_aff_fn=gaussian_aff)

步骤3:通过RRWM解决图匹配问题

>>> X = pygm.rrwm(K, n1, n2, beta=100)
>>> X = pygm.hungarian(X)
>>> X # X is the batched permutation matrix
[[[0. 0. 0. 1.]
  [0. 0. 1. 0.]
  [1. 0. 0. 0.]
  [0. 1. 0. 0.]]

 [[0. 0. 0. 1.]
  [0. 0. 1. 0.]
  [1. 0. 0. 0.]
  [0. 1. 0. 0.]]

 [[0. 0. 0. 1.]
  [0. 0. 1. 0.]
  [1. 0. 0. 0.]
  [0. 1. 0. 0.]]]

最后一步:评估准确性

>>> (X * X_gt).sum() / X_gt.sum()
1.0

下一步

请查看示例库以了解如何应用pygmtools来解决实际问题。 您可以查看API和模块以获取API文档。