GraphSage代码阅读笔记(TensorFlow版)GraphSage代码阅读笔记(TensorFlow版)⽬录
⼀、论⽂、代码链接
⼆、⽂件结构
1.⽂件⽬录
├──eval_scripts //验证集
├──example_data //ppi数据集
└──graphsage//模型结构定义、GCN层定义、……
2.eval_scripts //验证集⽬录内容
├──citation_eval.py
├──ppi_eval.py
└──reddit_eval.py
├──toy-ppi-class_map.json //图节点id映射到类。
├──toy-ppi-feats.npy //预训练好得到的features
├──toy-ppi-G.json //图的信息
├──ttoy-ppi-walks//从⼀点出发随机游⾛到邻居节点的情况,对于每个点取198次
└──toy-ppi-id_map.json //节点编号与序号的⼀⼀对应
├── init //导⼊模块
├──aggregators // 聚合函数定义
├──inits.py // 初始化的⼀些公⽤函数
├── layers // GCN层的定义
├── metrics // 评测指标的计算
├── minibatch//minibatch iterator函数定义
├── models // 各种模型结构定义
├── neigh_samplers //定义从节点的邻居中采样的采样器
├── prediction//
├── supervised_models
├── supervised_train
├── unsupervised_train
└── utils // ⼯具函数的定义
三、数据解析
3.1.数据集信息表:
表⼀:
表⼆:
注:
3.2数据⽂件解析
<-ppi-G.json //图的信息
数据中只有⼀个图,⽤来做节点分类任务。
图为⽆向图,由nodes集和links集合构成,每个集合都是⼀个list,⾥⾯包含的每⼀个node或link都是词典形式存储的
数据格式:
注:(
<-ppi-class_map.json,图节点id映射到类。格式为:{“0”: [1, 0, 0,…],…,“14754”: [1, 1, 0, 0,…]}
<-ppi-id_map.jsontoy-ppi-id_map.json //节点编号与序号的⼀⼀对应
数据格式为:{“0”: 0, “1”: 1,…, “14754”: 14754}
<-ppi-feats.npy //预训练好得到的features
numpy存储的节点特征数组; 由id_map.json给出的顺序。 可以省略,仅使⽤⾝份功能。
<-
四、代码运⾏及其环境安装与配置
4.1环境安装
1.可通过pip install - 安装以下版本的包
absl-py==0.2.2
astor==0.6.2
backports.weakref==1.0.post1
bleach==1.5.0
decorator==4.3.0
enum34==1.1.6
funcsigs==1.0.2
futures==3.1.0
gast==0.2.0
grpcio==1.12.1
html5lib==0.9999999
Markdown==2.6.11
mock==2.0.0
networkx==1.11
numpy==1.14.5
pbr==4.0.4
protobuf==3.6.0
scikit-learn==0.19.1
scipy==1.1.0
six==1.11.0
sklearn==0.0
tensorboard==1.8.0
tensorflow==1.8.0
termcolor==1.1.0
Werkzeug==0.14.1
注:
networkx版本必须⼩于等于1.11,否则报错
Docker程序安装:
没有docker需要安装docker。
也可以在[docker](docs.docker/)映像中运⾏GraphSage。 克隆项⽬后,按如下所⽰构建并运⾏映像:$ docker build -t graphsage .
$ docker run -it graphsage bash
还可以使⽤[nvidia-docker](github/NVIDIA/nvidia-docker)运⾏GPU映像:
$ docker build -t graphsage:gpu -f Dockerfile.gpu .
$ nvidia-docker run -it graphsage:gpu bash
4.2 代码运⾏
1.在命令运⾏unsupervised_train.py
unsupervised_train.py 是⽤节点和节点的邻接信息做loss训练,训练好可以输出节点embedding,使⽤EdgeMinibatchIterator python -m graphsage.unsupervised_train --train_prefix ./example_data/toy-ppi --
model graphsage_mean --max_total_steps 1000--validate_iter 10
#参考blog.csdn/yyl424525/article/details/102966617
model可选值:
* graphsage_mean -- GraphSage with mean-based aggregator
* graphsage_seq -- GraphSage with LSTM-based aggregator
* graphsage_maxpool -- GraphSage with max-pooling aggregator (as described in the NIPS 2017 paper)
* graphsage_meanpool -- GraphSage with mean-pooling aggregator (a variant of the pooling aggregator, where the element-wie mean replaces the eleme nt-wise max).
* gcn -- GraphSage with GCN-based aggregator
* n2v -- an implementation of [DeepWalk](/abs/1403.6652)(called n2v for short in the code.)
2.运⾏supervised_train.py,注意train_prefix参数的值也需要改:…/example_data/toy-ppi
python -m graphsage.supervised_train --train_prefix ./example_data/toy-ppi --model graphsage_mean --sigmoid
五、代码⽂件解析
5.1.init.py
from __future__ import print_function
'''即使在python2.X,使⽤print就得像python3.X那样加括号使⽤'''
from __future__ import division
'''导⼊python未来⽀持的语⾔特征division(精确除法),
6 # 当我们没有在程序中导⼊该特征时,"/"操作符执⾏的是截断除法(Truncating Division);
7 # 当我们导⼊精确除法之后,"/"执⾏的是精确除法, "//"执⾏截断除除法'''
5.2.unsupervised_train.py代码
# _*_ coding:UTF-8
#supervised_train.py 是⽤节点分类的label来做loss训练,不能输出节点embedding,使⽤NodeMinibatchIterator
#unsupervised_train.py 是⽤节点和节点的邻接信息做loss训练,训练好可以输出节点embedding,使⽤EdgeMinibatchIterator
from __future__ import division
'''即使在python2.X,使⽤print就得像python3.X那样加括号使⽤'''
from __future__ import print_function
'''导⼊python未来⽀持的语⾔特征division(精确除法),
6 # 当我们没有在程序中导⼊该特征时,"/"操作符执⾏的是截断除法(Truncating Division);
7 # 当我们导⼊精确除法之后,"/"执⾏的是精确除法, "//"执⾏截断除除法'''
import os#导⼊操作系统模块
import time#导⼊时间模块
import tensorflow as tf#导⼊TensorFlow模块
import numpy as np#导⼊numpy模块
dels import SampleAndAggregate, SAGEInfo, Node2VecModel
from graphsage.minibatch import EdgeMinibatchIterator
igh_samplers import UniformNeighborSampler
from graphsage.utils import load_data
'''如果服务器有多个GPU,tensorflow默认会全部使⽤。如果只想使⽤部分GPU,可以通过参数CUDA_VISIBLE_DEVICES来设置GPU的可见性。'''
tensorflow版本选择'''Set random seed设置相同的seed,则每次⽣成的随机数也相同,如果不设置seed,则每次⽣成的随
机数都会不⼀样。'''
seed =123

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。