图神经网络入门:搭建GNN环境

图神经网络入门:搭建GNN环境

本教程是在Windows10下安装Pytorch(GPU版本,CPU版本比较简单,不需要CUDA、cudnn) ,CUDA ,cudnn,pyG
许多初学者,开始以为直接安装好上述的软件或者包就直接能用了,我一开始也是这么干的。但是是错误的。注意:上述软件或包版本要求一一对应!!!不能出错。
查询的连接在Pytorch官网Pytorch
如下图所示Pytorch1.4

torch torchvision python 版本对应表

在这里插入图片描述

NVIDIA驱动与CUDA版本对应表

在这里插入图片描述
查询方式如下图
在这里插入图片描述

在这里选择pytorch1.4版本。可以使用Anaconda安装,也可以直接用命令安装,建议使用Anaconda安装,后续安装各种包很方便,路径也好查到。关于Anaconda的安装可以查看我的另一篇文章Anaconda.参考前半部分即可。

在安装好Anaconda的前提下开始安装pytorch、cuda、cudnn、pyG.

  • 1、在anaconda创建新的环境。
    打开如下图的Anaconda Prompt
    在这里插入图片描述
    conda环境配置命令如下:
#创建新环境命令
conda create -n pyG python=3.6  #pyG是环境名字  
#删除环境命令    
conda remove -n pyG --all
#激活环境
source activate pyG   # 有的提示使用  conda actiavte pyG
#退出环境
source deactivate pyG  #有的提示使用 conda deactivate pyG
  • 2、在pyG环境下安装pytorch1.4
    在这里插入图片描述
    输入命令:

# CUDA 10.1
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch

根据提示操作即可。安装后测试

python #进入python编译环境

import torch
print(torch.__version__)
#注意版本号!!!

在这里插入图片描述

  • 3、安装CUDA
    进入CUDA官网CUDA
    注意选择版本号,上一步安装pytorch时,命令的后段中 cudatoolkit=10.1 。所以必须按照这个版本的。
    在这里插入图片描述
    **下载安装即可,注意安装时,不要选择推荐安装,选择自定义安装,自己选择安装的路径,一开始提示的路径不是安装路径,只是一个临时解压路径,安装好就消失了。**其他的步骤默认即可。
    安装后测试cuda版本
nvcc -V 
nvcc -version

在这里插入图片描述

  • 4、安装cudnn,这是一个加速处理。(注意版本号与CUDA对应)
    可以直接去官网下载cudnn。常常遇到文件失效或者链接不存在,那就baidu一下,网上有很多资源可以下载。解压后,将其中的文件复制到上一步安装CUDA对应的路径文件下即可!

  • 5、开始安装Pytorch geometric 。(这里安装1.4.3版本)
    先测试之前的安装是否成功!!!

#1、测试Pytorch 1.4.0
import torch
print(torch.__version__)
#1.4.0

#2、测试CUDA 10.1
import torch
print(torch.cuda.is_available())
# True
#在终端测试 nvcc
nvcc --version
#10.1

开始安装pytorch geometric相关包

$ pip install torch-scatter==latest+cu101 -f https://pytorch-geometric.com/whl/torch-1.4.0.html
$ pip install torch-sparse==latest+cu101  -f https://pytorch-geometric.com/whl/torch-1.4.0.html
$ pip install torch-cluster==latest+cu101 -f https://pytorch-geometric.com/whl/torch-1.4.0.html
$ pip install torch-spline-conv==latest+cu101  -f https://pytorch-geometric.com/whl/torch-1.4.0.html
$ python setup.py install or pip install torch-geometric

也可以下先下载包到本地,在执行pip命令比较快。(推荐)
下载地址前四个命令对应的包
注意版本号,以及CPU还是GPU、cu101,cp36 (例如torch_cluster-1.5.3+cu101-cp36-cp36m-win_amd64.whl)
下载好后,pip命令安装

pip install torch_cluster-1.5.3+cu101-cp36-cp36m-win_amd64.whl
pip install torch_spline_conv-latest+cu101-cp36-cp36m-win_amd64.whl
pip install torch_sparse-latest+cu101-cp36-cp36m-win_amd64.whl
pip install torch_scatter-2.0.3+cu101-cp36-cp36m-win_amd64.whl
pip install torch-geometric

测试是否安装成功

import torch
from torch_geometric.data import Data

edge_index = torch.tensor([[0, 1, 1, 2],
                           [1, 0, 2, 1]], dtype=torch.long)
x = torch.tensor([[-1], [0], [1]], dtype=torch.float)

data = Data(x=x, edge_index=edge_index)
print(data)
# Data(edge_index=[2, 4], x=[3, 1])

#整理不容易,小白入门必看。

# GPF ## 一、GPF(Graph Processing Flow):利用神经网络处理问题的一般化流程 1、节点预表示:利用NE框架,直接获得全每个节点的Embedding; 2、正负样本采样:(1)单节点样本;(2)节点对样本; 3、抽取封闭子:可做类化处理,建立一种通用数据结构; 4、子特征融合:预表示、节点特征、全局特征、边特征; 5、网络配置:可以是输入、输出的网络;也可以是输入,分类/聚类结果输出的网络; 6、训练和测试; ## 二、主要文件: 1、graph.py:读入数据; 2、embeddings.py:预表示学习; 3、sample.py:采样; 4、subgraphs.py/s2vGraph.py:抽取子; 5、batchgraph.py:子特征融合; 6、classifier.py:网络配置; 7、parameters.py/until.py:参数配置/帮助文件; ## 三、使用 1、在parameters.py中配置相关参数(可默认); 2、在example/文件夹中运行相应的案例文件--包括链接预测、节点状态预测; 以链接预测为例: ### 1、导入配置参数 ```from parameters import parser, cmd_embed, cmd_opt``` ### 2、参数转换 ``` args = parser.parse_args() args.cuda = not args.noCuda and torch.cuda.is_available() torch.manual_seed(args.seed) if args.cuda: torch.cuda.manual_seed(args.seed) if args.hop != 'auto': args.hop = int(args.hop) if args.maxNodesPerHop is not None: args.maxNodesPerHop = int(args.maxNodesPerHop) ``` ### 3、读取数据 ``` g = graph.Graph() g.read_edgelist(filename=args.dataName, weighted=args.weighted, directed=args.directed) g.read_node_status(filename=args.labelName) ``` ### 4、获取全节点的Embedding ``` embed_args = cmd_embed.parse_args() embeddings = embeddings.learn_embeddings(g, embed_args) node_information = embeddings #print node_information ``` ### 5、正负节点采样 ``` train, train_status, test, test_status = sample.sample_single(g, args.testRatio, max_train_num=args.maxTrainNum) ``` ### 6、抽取节点对的封闭子 ``` net = until.nxG_to_mat(g) #print net train_graphs, test_graphs, max_n_label = subgraphs.singleSubgraphs(net, train, train_status, test, test_status, args.hop, args.maxNodesPerHop, node_information) print('# train: %d, # test: %d' % (len(train_graphs), len(test_graphs))) ``` ### 7、加载网络模型,并在classifier中配置相关参数 ``` cmd_args = cmd_opt.parse_args() cmd_args.feat_dim = max_n_label + 1 cmd_args.attr_dim = node_information.shape[1] cmd_args.latent_dim = [int(x) for x in cmd_args.latent_dim.split('-')] if len(cmd_args.latent_dim) == 1: cmd_args.latent_dim = cmd_args.latent_dim[0] model = classifier.Classifier(cmd_args) optimizer = optim.Adam(model.parameters(), lr=args.learningRate) ``` ### 8、训练和测试 ``` train_idxes = list(range(len(train_graphs))) best_loss = None for epoch in range(args.num_epochs): random.shuffle(train_idxes) model.train() avg_loss = loop_dataset(train_graphs, model, train_idxes, cmd_args.batch_size, optimizer=optimizer) print('\033[92maverage training of epoch %d: loss %.5f acc %.5f auc %.5f\033[0m' % (epoch, avg_loss[0], avg_loss[1], avg_loss[2])) model.eval() test_loss = loop_dataset(test_graphs, model, list(range(len(test_graphs))), cmd_args.batch_size) print('\033[93maverage test of epoch %d: loss %.5f acc %.5f auc %.5f\033[0m' % (epoch, test_loss[0], test_loss[1], test_loss[2])) ``` ### 9、运行结果 ``` average test of epoch 0: loss 0.62392 acc 0.71462 auc 0.72314 loss: 0.51711 acc: 0.80000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 10.09batch/s] average training of epoch 1: loss 0.54414 acc 0.76895 auc 0.77751 loss: 0.37699 acc: 0.79167: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 34.07batch/s] average test of epoch 1: loss 0.51981 acc 0.78538 auc 0.79709 loss: 0.43700 acc: 0.84000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 9.64batch/s] average training of epoch 2: loss 0.49896 acc 0.79184 auc 0.82246 loss: 0.63594 acc: 0.66667: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 28.62batch/s] average test of epoch 2: loss 0.48979 acc 0.79481 auc 0.83416 loss: 0.57502 acc: 0.76000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 9.70batch/s] average training of epoch 3: loss 0.50005 acc 0.77447 auc 0.79622 loss: 0.38903 acc: 0.75000: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 34.03batch/s] average test of epoch 3: loss 0.41463 acc 0.81132 auc 0.86523 loss: 0.54336 acc: 0.76000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 9.57batch/s] average training of epoch 4: loss 0.44815 acc 0.81711 auc 0.84530 loss: 0.44784 acc: 0.70833: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 28.62batch/s] average test of epoch 4: loss 0.48319 acc 0.81368 auc 0.84454 loss: 0.36999 acc: 0.88000: 100%|███████████████████████████████████| 76/76 [00:07<00:00, 10.17batch/s] average training of epoch 5: loss 0.39647 acc 0.84184 auc 0.89236 loss: 0.15548 acc: 0.95833: 100%|█████████████████████████████████████| 9/9 [00:00<00:00, 28.62batch/s] average test of epoch 5: loss 0.30881 acc 0.89623 auc 0.95132 ```
人工智能(AI)最近经历了复兴,在视觉,语言,控制和决策等关键领域取得了重大进展。 部分原因在于廉价数据和廉价计算资源,这些资源符合深度学习的自然优势。 然而,在不同的压力下发展的人类智能的许多定义特征仍然是当前方法无法实现的。 特别是,超越一个人的经验 - 从婴儿期开始人类智能的标志 - 仍然是现代人工智能的一项艰巨挑战。 以下是部分立场文件,部分审查和部分统一。我们认为组合概括必须是AI实现类似人类能力的首要任务,结构化表示和计算是实现这一目标的关键。就像生物学利用自然和培养合作一样,我们拒绝“手工工程”和“端到端”学习之间的错误选择,而是倡导一种从其互补优势中获益的方法。我们探索如何在深度学习架构中使用关系归纳偏差来促进对实体,关系和组成它们的规则的学习。我们为AI工具包提供了一个新的构建模块,具有强大的关系归纳偏差 - 形网络 - 它概括和扩展了在形上运行的神经网络的各种方法,并为操纵结构化知识和生成结构化行为提供了直接的界面。我们讨论网络如何支持关系推理和组合泛化,为更复杂,可解释和灵活的推理模式奠定基础。作为本文的配套文件,我们还发布了一个用于构建形网络的开源软件库,并演示了如何在实践中使用它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为风筝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值