Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
weiminbai 5c7fbd7b6f | 2 years ago | |
---|---|---|
.idea | 2 years ago | |
ascend310_infer | 2 years ago | |
scripts | 2 years ago | |
src | 2 years ago | |
.DS_Store | 2 years ago | |
README.md | 2 years ago | |
eval.py | 2 years ago | |
export.py | 2 years ago | |
postprocess.py | 2 years ago | |
preprocess.py | 2 years ago | |
requirements.txt | 2 years ago | |
train.py | 2 years ago |
符号图卷积网络(SGCN)于2018年提出,旨在对符号图结构数据进行学习。作者重新设计了GCN模型,根据平衡理论,定义平衡路径,维护‘friend’表示和‘enemy’表示,一起作为顶点的表达。
论文: Signed Graph Convolutional Network. Tyler Derr, Yao Ma, and Jiliang Tang ICDM, 2018.
SGCN根据正负连接分别包含三个图卷积层。每一层都以相应的正向/负向连接边作为输入数据。网络的loss计算由三部分组成,分别是只考虑正向连接的损失,只考虑负向连接的损失以及两者都考虑的回归损失。
实验基于两个与Bitcoin相关取自真实世界的数据集:Bitcoin-Alpha和Bitcoin-OTC,这两个数据集都来自致力于建立开放市场的网站,用户可以在这些网站上使用比特币买卖东西。由于比特币账户是匿名的,网站的用户为了安全,都开通了网络信任权限。这让用户可以积极(或消极)评价他们信任(或不信任)的人,这有助于解决交易中可能存在的欺诈问题。实验中,划分其中80%作为训练集,20%作为测试集。
数据集 | 用户数量 | 正向连接 | 负向连接 |
---|---|---|---|
Bitcoin-Alpha | 3784 | 12729 | 1416 |
Bitcoin-OTC | 5901 | 18390 | 3132 |
通过官方指南安装MindSpore后,下载数据集,将下载好的数据集按如下目录结构进行组织,也可按此结构自行添加数据集:
.
└─input
├─bitcoin_alpha.csv
└─bitcoin_otc.csv
准备好数据集后,即可按顺序依次进行模型训练与评估操作:
# 单卡训练
bash ./scripts/run_standalone_train.sh [DEVICE_ID]
# Ascend多卡训练
bash ./scripts/run_distributed_train.sh [RANK_TABLE] [RANK_SIZE] [DEVICE_START] [DATA_PATH] [DISTRIBUTED]
示例:
# 单卡训练
bash ./scripts/run_standalone_train.sh 0
# Ascend多卡训练(8P)
bash ./scripts/run_distributed_train.sh ./rank_table_8pcs.json 8 0 ./input/bitcoin_otc.csv True
# 评估
bash ./scripts/run_eval.sh [checkpoint_auc] [checkpoint_f1]
示例:
# 评估
bash ./scripts/run_eval.sh sgcn_otc_auc.ckpt sgcn_otc_f1.ckpt
.
└─sgcn
├─README_CN.md # 中文指南
|
├─scripts
| ├─run_export.sh # 模型导出运行脚本
| ├─run_eval.sh # 评估运行脚本
| ├─run_distributed_train.sh # 多卡训练脚本
| ├─run_infer_310.sh # Ascend310推理脚本
| └─run_standalone_train.sh # 单卡训练脚本
|
├─src
| ├─param_parser.py # 参数配置
| ├─ms_utils.py # 功能函数定义
| ├─sgcn.py # SGCN骨干
| ├─signedsageconvolution.py # 定义图卷积层
| └─metrics.py # 计算损失和反向传播
|
├─requirements.txt # 依赖包
├─train.py # 训练
├─eval.py # 评估
├─preprocess.py # 预处理
├─postprocess.py # 后处理
└─export.py # 模型导出
训练参数可以在param_parser.py
中配置。
"learning-rate": 0.01, # 学习率
"epochs": 500, # 训练轮次
"lamb": 1.0, # Embedding正则化参数
"weight_decay": 1e-5, # 第一图卷积层参数的权重衰减
"test-size": 0.2, # 测试集比例
如需查阅更多参数信息,请参阅param_parser.py
脚本内容。
# 单卡训练
bash ./scripts/run_standalone_train.sh 0
# Ascend多卡训练(8P)
bash ./scripts/run_distributed_train.sh ./rank_table_8pcs.json 8 0 ./input/bitcoin_otc.csv True
其中,Ascend多卡训练还需要将相应RANK_TABLE_FILE
文件的放置目录输入脚本(如./rank_table_8pcs.json
),RANK_TABLE_FILE
可按此方法生成。
训练时,当前训练轮次数,模型损失值,每轮次运行时间等信息会以如下形式显示,且运行日志将保存至./logs/train.log
:
=========================================================================
Epoch: 0494 train_loss= 0.6885321 time= 0.3938899040222168 auc= 0.8568888790661333 f1= 0.8595539481615432
Epoch: 0494 sample_time= 0.09816598892211914 train_time= 0.03619980812072754 test_time= 0.2595179080963135 save_time= 0.0002493858337402344
=========================================================================
Epoch: 0495 train_loss= 0.6892552 time= 0.3953282833099365 auc= 0.8591453682601632 f1= 0.8528564934080921
Epoch: 0495 sample_time= 0.1002199649810791 train_time= 0.03614640235900879 test_time= 0.2589559555053711 save_time= 0.00026345252990722656
=========================================================================
Epoch: 0496 train_loss= 0.6864389 time= 0.3973879814147949 auc= 0.8581971834403941 f1= 0.7663798808735937
Epoch: 0496 sample_time= 0.09870719909667969 train_time= 0.03621697425842285 test_time= 0.26245594024658203 save_time= 0.0003509521484375
=========================================================================
Epoch: 0497 train_loss= 0.68468577 time= 0.3998579978942871 auc= 0.8540750929442135 f1= 0.6958808063102541
Epoch: 0497 sample_time= 0.10423851013183594 train_time= 0.03621530532836914 test_time= 0.2593989372253418 save_time= 0.00024199485778808594
=========================================================================
Epoch: 0498 train_loss= 0.6862765 time= 0.3946268558502197 auc= 0.8611026245391791 f1= 0.8313908313908315
Epoch: 0498 sample_time= 0.10092616081237793 train_time= 0.03557133674621582 test_time= 0.25812458992004395 save_time= 0.00023102760314941406
=========================================================================
Epoch: 0499 train_loss= 0.6885195 time= 0.3965325355529785 auc= 0.8558373386341545 f1= 0.8473539308657082
Epoch: 0499 sample_time= 0.10099625587463379 train_time= 0.03545022010803223 test_time= 0.26008152961730957 save_time= 0.00026535987854003906
=========================================================================
Epoch: 0500 train_loss= 0.692978 time= 0.3948099613189697 auc= 0.8620984786140553 f1= 0.8376332457902056
Epoch: 0500 sample_time= 0.10086441040039062 train_time= 0.03542065620422363 test_time= 0.25852012634277344 save_time= 0.0002288818359375
=========================================================================
Training fished! The best AUC and F1-Score is: 0.8689866859770485 0.9425843754201964 Total time: 41.48991870880127
******************** finish training! ********************
在完成训练流程的基础上,评估流程将自动从checkpoints目录加载对应任务的最优检查点用于模型评估。
# 评估
bash ./scripts/run_eval.sh sgcn_otc_auc.ckpt sgcn_otc_f1.ckpt
这里以Bitcoin-OTC数据集为例,评估后模型在验证集上的相关评估结果将以如下形式显示,且运行日志将保存至./logs/eval.log
:
=====Evaluation Results=====
AUC: 0.866983
F1-Score: 0.930903
============================
在完成训练流程的基础上,MINDIR模型导出流程将自动从checkpoints目录加载对应任务的最优检查点用于相应MINDIR模型导出。
# MINDIR模型导出
bash ./scripts/run_export.sh 0
若模型导出成功,程序将显示如下,且运行日志将保存至./logs/export.log
:
==========================================
sgcn.mindir exported successfully!
==========================================
在执行推理前,mindir文件必须通过export.py
脚本导出。以下展示了使用mindir模型执行推理的示例。注意,对不同数据集的精度指标进行推理时,需要修改postprocess.py
文件中对应的checkpoint
参数。
# Ascend310 推理
bash ./scripts/run_infer_310.sh [MINDIR_PATH] [DATASET_NAME] [DATASET_PATH] [NEED_PREPROCESS] [DEVICE_ID]
DATASET_NAME
表示数据集名称,取值范围: ['bitcoin-alpha', 'bitcoin-otc']。NEED_PREPROCESS
表示数据是否需要预处理,取值范围:'y' 或者 'n'。DEVICE_ID
可选,默认值为0。推理结果保存在脚本执行的当前路径,你可以在acc.log
中看到以下精度计算结果,这里以bitcoin-otc数据集为例。
==========================================
Test set results: auc= 0.87464 f1= 0.93635
==========================================
参数 | SGCN |
---|---|
资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;操作系统 Euler2.8 |
上传日期 | 2021-10-01 |
MindSpore版本 | 1.3.0 |
数据集 | Bitcoin-OTC / Bitcoin-Alpha |
训练参数 | epoch=500, lr=0.01, weight_decay=1e-5 |
优化器 | Adam |
损失函数 | Softmax交叉熵 |
AUC | 0.8663 / 0.7979 |
F1-Score | 0.9309 / 0.9527 |
脚本 | SGCN |
参数 | SGCN |
---|---|
资源 | Ascend 310服务器 |
上传日期 | 2021-11-01 |
MindSpore版本 | 1.3.0 |
数据集 | Bitcoin-OTC / Bitcoin-Alpha |
训练参数 | epoch=500, lr=0.01, weight_decay=1e-5 |
优化器 | Adam |
损失函数 | Softmax交叉熵 |
AUC | 0.8746 / 0.8227 |
F1-Score | 0.9363 / 0.9543 |
脚本 | SGCN |
train.py和eval.py脚本中使用mindspore.set_seed()对全局随机种子进行了固定,可在对应的parser中进行修改即可。
请浏览官网主页。
符号图卷积神经网络的MindSpore版本
Python Shell C++ Text
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》