可以在GPU上跑通的代码(含数据集),我已经放到了以下链接,
链接:https://pan.baidu.com/s/1gM4KTbRNHzfbGEGgvEjXAw
提取码:e7wu
在服务器上跑
先创建一个虚拟环境
conda create -n GDN python==3.7
conda activate GDN
按照read me一步一步安装包。
### Requirements
* Python >= 3.6
* cuda == 10.2
* [Pytorch==1.5.1](https://pytorch.org/)要去这个网站复制下载命令
* [PyG: torch-geometric==1.5.0](https://pytorch-geometric.readthedocs.io/en/latest/notes/installation.html)
### Install packages
# run after installing correct Pytorch package
bash install.sh
安装
pip install scikit-learn==1.0.2
matplotlib == 3.1.1
numpy == 1.19.4
pandas == 0.25.1
bash run.sh cpu swat
接下来按照两个readme一步步来
因为data/swat/train.csv是从process_swat.py生成的,所以先用现有的处理好的msl数据集试验一下环境是否已配好。
bash run.sh cpu msl
# or with gpu
bash run.sh msl # e.g. bash run.sh 1 msl
We use part of msl dataset(refer to telemanom) as demo example.
# put your dataset under data/ directory with the same structure shown in the data/msl/
data
|-msl
| |-list.txt # the feature names, one feature per line
| |-train.csv # training data
| |-test.csv # test data
|-your_dataset
| |-list.txt
| |-train.csv
| |-test.csv
| ...
*.csv中的第一列将被视为索引列。
*.csv中的列序列不需要匹配list.txt中的序列。我们将根据list.txt中的顺序重新排列数据列。
*test.csv应该有一个名为“attack”的列,其中包含被攻击或未被攻击的地面真相标签(0/1)(0:正常,1:被攻击)
# using gpu
bash run.sh
# or using cpu
bash run.sh cpu
You can change running parameters in the run.sh.
SWaT and WADI datasets can be requested from iTrust
下面是处理数据的readme
The directory contains the main preprocessing code for SWaT and WADI.
转化SWaT_Dataset_Normal_v0/SWaT_Dataset_Attack_v0.xlsx成为csv文件,重命名’Normal’ / ‘Normal/Attack’列为’attack’ with label 0/1
重命名修改后的文件为’swat_train.csv’和’swat_test.csv’,作为process_swat.py的输入文件
运行脚本python process_swat.py
处理数据集
运行脚本会生成train.csv和test.csv,需要自己copy到data/swat/train.csv或者更改一下生成保存的路径。
还要自己创建一下list.txt,模仿msl的。
基于attack描述文件,在WADI_attackdata.csv中添加 0/1 ‘attack’列,并重命名文件为’WADI_attackdata_labelled.csv’
运行脚本python process_wadi.py
We have provided part of the processed data via link.
我们在此链接中提供了部分已处理的数据,这是经过process_swat的csv文件,可以直接放到data/swat/train.csv.
出现问题:
只能在cpu上跑,在GPU上报错,是因为pytorch和cuda版本和显卡算力不符,显卡是最新的,算力很强,得用新版本的pytorch和cuda。
pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge
又报错,是因为pytorch-geometric包的版本和pytorch,cuda又不对应了,可以看到刚才安装install.sh中
先查看一下我服务器上的cuda版本,刚才安装的pytorch是1.10.0版本的
去官网https://pytorch-geometric.com/whl安装对应的pytorch-geometric包版本
注意torch-geometric务必是1.5.0版本的!!!
运行程序,又有错误,是因为1.8.0以上版本的pytorch的six文件有所变化
解决:
import collections.abc as container_abcs
int_classes = int
string_classes = str
以上,可以正常运行。
以下是另一篇论文的配置,别看了……
IOT报错
这是因为前面下载的pytorch-geometric的版本不对,重新下载2.0.0版本的,就可以了。