# fault_prediction **Repository Path**: jianbogu/fault_prediction ## Basic Information - **Project Name**: fault_prediction - **Description**: No description available - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-06-05 - **Last Updated**: 2025-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fault_prediction # 基于lstm的预测模型 本模型可用于多变量长时间序列预测,因为没有真实数据,这里选取了电力变压器ETT数据集来进行测试 ## 数据集介绍 电力变压器ETT数据集格式: ![data_exp.png](data_exp.png) 表的列的意义: | 列名 | 全称 | 中文含义 | 说明 | |-------| --- | --- |----------------------------| | date | - | 日期时间 | 时间索引 (YYYY-MM-DD HH:MM:SS) | | HUFL | High UseFul Load | 高压侧有功功率 | 高压侧实际做功的有用负荷 | | HULL | High UseLess Load | 高压侧无功功率 | 高压侧用于建立磁场的无用负荷 | | MUFL | Middle UseFul Load | 中压侧有功功率 | 中压侧实际做功的有用负荷 | | MULL | Middle UseLess Load | 中压侧无功功率 | 中压侧用于建立磁场的无用负荷 | | LUFL | Low UseFul Load | 低压侧有功功率 | 低压侧实际做功的有用负荷 | | LULL | Low UseLess Load | 低压侧无功功率 | 低压侧用于建立磁场的无用负荷 | | OT | Oil Temperature | 变压器顶层油温 | 核心预测目标,反映变压器运行状态和负载 | > 💡 关键说明: > > 负载特征(HULL/MUFL/LULL) 是影响油温的核心因素,电流通过绕组产生焦耳热,直接导致温度上升1; > > > OT 需严格监控:变压器A级绝缘标准要求油温≤95℃,温升(与环境温差)≤55℃,否则绝缘老化加速(“八度规则”:温升每超8℃,寿命减半)1。 > > 预测油温(OT)直接关系到设备寿命维护和故障预防(如过热导致绝缘失效),具有明确的工程意义。 对于时序模型的意义来说,对于这份数据集,可以通过最近一段时间的数据,预测未来一段时间的油温是否会高于某个阈值,或者预测未来一段时间内最高的油温 ## 操作 ### 1. 特征生成 ```shell cd preprocess python csv2feature.py ``` input_file是ETT格式的,每行包含时间和其他变量 数据示例: ``` date,HUFL,HULL,MUFL,MULL,LUFL,LULL,OT 2016-07-01 00:00:00,5.827000141143799,2.009000062942505,1.5989999771118164,0.4620000123977661,4.203000068664552,1.3400000333786009,30.5310001373291 2016-07-01 01:00:00,5.692999839782715,2.075999975204468,1.4919999837875366,0.4259999990463257,4.142000198364259,1.371000051498413,27.78700065612793 2016-07-01 02:00:00,5.1570000648498535,1.741000056266785,1.2790000438690186,0.35499998927116394,3.776999950408936,1.218000054359436,27.78700065612793 2016-07-01 03:00:00,5.0900001525878915,1.9420000314712524,1.2790000438690186,0.3910000026226044,3.806999921798706,1.2790000438690186,25.04400062561035 2016-07-01 04:00:00,5.357999801635742,1.9420000314712524,1.4919999837875366,0.4620000123977661,3.868000030517578,1.2790000438690186,21.947999954223643 ``` 最后生成的文件是训练数据和测试数据: .train和.test 训练数据主要是为了训练一个时间序列模型,通过最近两天左右的数据,预测未来两个小时是否会超过某个温度。 ### 2. 模型训练 ```shell nohup python train_lstm.py \ --train_file .train \ --valid_file .test \ --model_path /data/models/ett_lstm_model \ --log_file /data/models/lstm.log \ --input_dim 22 \ --hidden_dim 64 \ --num_layers 3 \ --dropout 0.2 \ --max_seq_len 500 \ --log_step 10 \ --eval_step 50 \ --epochs 500 \ --save_step 50 > /data/models/log 2>&1 & ``` 用上一步生成的训练与测试文件,训练模型,模型文件目录是:/data/models/ett_lstm_model/ 生成的模型文件:lstm_v_steps___.model,模型文件会把版本号、步数、huber_loss和mse_loss卸载文件名里面,是对测试数据测试后的效果指标数据,到时候可以择优选择 同时生成特征处理文件,文件格式:feature_processors_.pkl,特征处理文件用于对输入数据特征做归一化 ### 3. 模型文件转化成onnx ```shell cd deploy python -m export_model.py \ --model_path /data/models/ett_lstm_model/lstm_v1749550966_steps_2300_3.0042_21.3771.model \ --log_file /data/models/lstm_export.log \ --input_dim 22 \ --hidden_dim 64 \ --num_layers 3 \ --dropout 0.2 \ --max_seq_len 500 ``` 根据之前的生成的模型文件,转化成onnx,用于最后模型基于onnxruntime在线部署预测 ### 4. 在线部署预测 ```shell cd deploy nohup python inference_server.py \ --port 7000 \ --onnx_path /data/models/ett_lstm_model/lstm_v1749550966_steps_2300_3.0042_21.3771.model.onnx \ --log_file /data/models/inf_server.log \ --fp_file /data/models/ett_lstm_model/feature_processors_1749550966.pkl \ --logging_type debug > /data/models/inf_server_log 2>&1 & ``` 绑定端口,指定模型onnx文件和特征处理文件、和日志文件,拉起预测服务。 ### 5. 测试 部署完成之后,可以用curl工具进行预测了 ```shell curl http://192.168.10.25:7000/lstm_prediction \ -X POST \ -d '{ "sequence":"2018-03-10 02:45:00,29.48600006103516,5.193999767303467,39.13600158691406,6.5939998626708975,-9.659000396728516,-1.6419999599456787,12.51449966430664;2018-03-10 03:00:00,29.56999969482422,5.361000061035156,38.46599960327149,6.353000164031982,-8.421999931335451,-1.6419999599456787,12.51449966430664;2018-03-10 03:15:00,31.077999114990234,5.78000020980835,39.27000045776367,6.460000038146973,-8.421999931335451,-1.6419999599456787,12.295000076293944;..." }' ``` 正确输出的格式可能是这样的: ```json { "prediction": 29.397624969482422, "status": "success" } ``` 批量化测试: ```shell python test_inference.py D:\公开数据集\iTransformer_datasets\ETT-small\ETTm2_feature.test 192.168.10.25:7000 ``` 上述批量化测试的脚本执行可以用测试文件的特征请求服务,获取预测值之后,跟真实值进行mse_loss计算,然后算一个平均值,一次来确认训练与预测效果是否一致