时间序列异常检测实验工具脚本使用说明 ====== 说明 ------ 本工具用于进行时间序列异常检测模型实验,基于PyTorch框架实现的深度学习训练脚本。 为了方便实验创新,本工具封装了dataloader、训练流程、测试流程、评估流程、日志记录与模型导出功能, 并内置了部分数据集、预处理算法、模型与评估方法。 在进行创新实验时,可以仅修改数据集、预处理算法、模型与评估方法四个内容中的一个就开始快速实验,节省实验的冗余代码开发。 数据集、预处理算法、模型与评估方法四部分内容进行自定义时,请按照指定格式设计。 实验的参数请通过config.ini文件进行设置。 如需特殊接口,请联系开发人员郑延钦,邮箱:zhengyanqin@iie.ac.cn 安装 ------ 环境依赖 python==3.9.7 * eventlet==0.33.3 * gevent==22.10.2 * loguru==0.6.0 * numpy==1.21.2 * pandas==1.4.1 * scikit_learn==1.2.2 * torch==1.10.2 * tqdm==4.63.1 python第三方库安装方法 pip3 install -r requirements.txt 配置文件参数说明 ------ config.ini文件用于配置相关设置,包括数据集、算法模型、预处理方法、评估方法、模型参数加载、实验基本参数与自定义参数。 [Dataset] # 填写数据集名称(文件夹名称),同时训练测试多个数据集,请用逗号隔开 # 请确保数据集已经按照要求格式放置在./dataset路径下 name=SWAT [Method] # 填写模型名称(文件名称,不用写".py"),同时训练测试多个算法,请用逗号隔开 # 请确保模型文件已经按照要求格式放置在./model路径下 # 模型名称请全部由字母组成 name=MtadGatAtt [Preprocess] # 填写预处理方法名称(文件名称,不用写".py") # 请确保预处理方法文件已经按照要求格式放置在./preprocess路径下 name=standardization [Evaluation] # 填写评估方法名称(文件名称,不用写".py"),同时使用多个评估方法,请用逗号隔开 # 请确保评估方法文件已经按照要求格式放置在./evaluation路径下 name=f1,f1pa,ftad,affiliation [ModelPath] # 模型加载先前参数,请用"模型名_数据集名"作为变量名 # 路径名称从TSAD文件夹下开始写相对路径,或者直接写绝对路径 MtadGatAtt_SWAT=none [BaseParameters] # train表示是否训练模型,请填写true或者false,为false时,仅测试模型 train=true # epoch表示训练轮数,请填写正整数 epochs=20 # batch-size表示每个batch的尺寸,请填写正整数 batch_size=32 # learning-rate表示学习率,建议不要高于0.001 learning_rate=1e-4 # device表示使用的设备,可以选auto、cpu、cuda,其中auto代表自动判断,有gpu使用gpu,没有则使用cpu;选gpu时需要选择gpu序号,例如cuda:0 device=auto [CustomParameters] # 此处可以填入自定义参数,数量不限,用于填写特殊需求输入,例如模型文件所需的所有外部参数,构建数据集的部分参数 # 输入数据长度input_size,即截取数据的窗口长度 input_size=60 # 输出数据长度output_size output_size=1 # 截取数据的窗口的移动步长 step=1 # 数据集文件(csv)中,第一行是否需要忽略(第一行为列名的话需要忽略) del_column_name=true # 数据集文件(csv)中,第一列是否是时间戳 time_index=true 启动与停止 ------ 通过运行main.py脚本文件,启动程序。可以选择 start | stop | daemon 三个参数。 * start是启动普通进程,前台运行,日志实时输出并本地记录,可输出训练进度条。 * stop是停止当前实验进程。 * daemon是启动守护进程,后台运行程序,日志仅保存本地,日志不包含训练进度条内容。 如无输入参数,默认选择start参数。使用方法如下所示: python3 main.py start/stop/daemon 本工具会输出实验日志、所有模型的最佳检测标签、模型参数文件到./records路径下。 数据集文件配置说明 ----- 所有数据集文件,均存放在./dataset路径下。 数据集可以包含子数据集,数据以csv格式文件存储,必须包含train.csv和test.csv。 * train.csv和test.csv的数据内容必须全为数值型数据,第一行可保留列名。 * train.csv和test.csv如包含时间戳,请置于第一列。 * test.csv最后一列为异常标签,建议用0表示正常数据,1表示异常数据(如标签含义相反,本工具会自动识别并反转标签)。 数据集路径示例如下: └── dataset ├── 数据集1名称 │ ├── 子数据集1名称 │ │ ├── train.csv │ │ ├── test.csv │ ├── 子数据集2名称 ... │ └── 子数据集m名称 ├── 数据集2名称 │ ├── train.csv │ └── test.csv ... └── 数据集n名称 预处理文件配置说明 ---- 所有预处理方法的文件,均存放在./preprocess路径下,并写入__init__文件。 每个预处理方法单独建立一个文件,新建预处理方法的命名全部采用英文和数字组成,文件名称直接使用预处理方法的命名。 文件内需包含MyDataset类,MyDataset类继承torch.utils.data.Dataset,必须定义__len__、__getitem__两个方法。 各个方法的具体设计要求,详见./preprocess/template.py文件。 模型文件配置说明 ----- 所有模型结构的文件,需存放于./method路径下,并写入__init__文件。 每个模型单独建立一个文件,新建模型的命名全部采用英文和数字组成,文件名称直接使用模型的命名。 文件内需包含Model类,Model类继承nn.Module,必须定义forward方法、loss方法和detection方法。 各个方法的具体设计要求,详见./method/template.py文件。 评估方法文件配置说明 ----- 所有评估方法的文件,需存放于./evaluation路径下,并写入__init__文件。 每个评估方法单独建立一个文件,新建评估方法的命名全部采用英文和数字组成,文件名称直接使用模型的命名。 文件内需定义evaluate方法,方法的输入输出设计详见./evaluation/template.py文件。