简介:面向电力系统继电保护与故障诊断方向的工程技术人员和研究人员,这份PDF文献系统探讨了基于人工神经网络的小电流接地故障选线方法。内容围绕小电流接地故障特征分析展开,提出了使用神经网络模型实现接地故障选线的思路,并引入改进的遗传算法优化网络权重与BP网络结构,通过自适应交叉变异概率提升全局搜索能力。文中以110 kV/35 kV配电系统作为实例,对比了常规神经网络与改进神经网络算法的输出误差和正确选线率,结果表明改进算法具有更低的误差和更高的选线正确率,对提升配电网故障检测精准度、降低误判率具有参考价值。文件为PDF格式,共1个文件,压缩包大小约360KB,已有113人学习下载,适合从事电力系统自动化、故障选线研究的专业人员作为算法设计与仿真对比的参考资料。
1. 小电流接地选线为什么难?人工神经网络解决的到底是哪一环
变电站10kV母线发生单相接地,主控室选线装置指示灯乱跳,三条出线轮流报警——这是小电流接地选线现场最常见的画面。故障电流只有几安培,电弧还不稳定,现场电磁干扰又大,传统的稳态幅值比幅法在这时候基本靠不住。人工神经网络小电流接地选线方法,正是把选线当成模式识别问题来做:从零序电流、零序电压的时域与频域特征里,让网络自己去学故障线路和非故障线路的区别。这篇笔记写给需要把原理变成可运行代码的继保工程师和研究生,从数学本质讲到特征构造,再讲到训练避坑和现场验证。
2. 人工神经网络选线的原理:选线如何变成一个学习问题
2.1 先看清小电流接地系统的故障特征
小电流接地系统包含中性点不接地系统和中性点经消弧线圈接地系统两类。发生单相接地时,故障电流要通过线路对地电容流回系统,这个电流很小,一般在几安培到几十安培之间。中性点不接地系统中,故障线路的零序电流等于全系统非故障线路对地电容电流之和,方向从线路流向母线;非故障线路的零序电流只是本线路的对地电容电流,方向从母线流向线路。单从稳态来看,故障线路的零序电流幅值最大、方向相反,理论上可以用比幅比相法选线。
但现场没这么理想。电弧性接地故障的电流波形畸变严重,稳态分量不稳定;消弧线圈补偿后,故障线路的稳态零序电流被补偿到很小,幅值特征失去意义。这个时候需要把暂态分量用起来:故障发生后的第一个工频周期内,暂态零序电流幅值远大于稳态值,且故障线路首半波极性与非故障线路相反,暂态分量的频谱能量分布也有可区分的差异。这些特征靠人工规则很难统一归纳,因为不同故障角、不同过渡电阻、不同出线长度下,特征表现完全不同。
2.2 从故障波形到线路标签:ANN把选线变成非线性分类
选线问题的数学本质并不复杂:输入是故障后提取的一组特征向量,输出是“第几条线路故障”的标签。问题是这个输入到输出的映射关系高度非线性,而且边界模糊——比如过渡电阻为200欧姆的故障,其暂态特征和金属性接地故障差别非常大,但远没到变成“非故障”的程度。人工神经网络的作用,就是通过多层非线性变换把这个映射函数拟合出来,不需要人手工写判断规则。
具体来说,一个典型的前馈网络输入层接收特征向量,经过隐含层的加权求和与非线性激活,输出层给出每条线路的故障概率。网络训练时,用大量带标签的故障样本做监督学习,误差通过反向传播逐层修正权重。这个过程本质上是求解一个高维非线性优化问题,目标是最小化输出概率与真实故障标签之间的交叉熵。训练完成后的网络就是一个静态的“选线专家”,输入新的故障特征向量,直接输出选线结果。比起传统规则法,它的优势在于能同时融合多个特征量,自动权衡不同特征在不同故障条件下的置信度。
2.3 网络结构选型:对选线场景选择BP、RBF还是Elman
标题里只说“人工神经网络”,落地时你得先定结构。我实际做过的对比里,三类网络用得最多:BP(多层前馈网络)、RBF(径向基函数网络)、Elman(反馈型神经网络)。
BP网络结构简单,训练算法成熟,适合离线训练、在线推理的选线场景。它的缺点是收敛慢、容易陷入局部最优,但这在工程上可以通过多组随机初始化取最优解来规避。RBF网络训练速度快,局部逼近能力强,在小样本下表现不错,但隐含层中心点的选取比较敏感,选不好就过拟合或欠拟合。Elman网络因为有反馈环,能记忆时序信息,对暂态波形的时间演化更敏感,但训练难度大,参数多,在嵌入式选线装置上部署时内存开销高。
我一般首选BP网络做基线模型。原因很直接:小电流接地选线装置对推理时延有要求,但要求不算极端;BP网络在训练充分的情况下,对故障特征向量的分类能力足够用,而且部署成C代码容易。RBF网络适合样本量只有几百组的早期研究阶段,Elman网络更适合研究暂态波形的全过程演化。你如果是第一次做这个方向,BP网络是最稳妥的起点,后面再根据验证集表现决定要不要换结构。
3. 特征构造与数据集制作:选线精度的真正瓶颈
3.1 特征量怎么取:暂态分量为主、稳态分量为辅
很多人在这个项目上翻车,不是网络结构没选对,而是特征没构造好。神经网络虽然能吃原始波形,但直接把一个工频周期的采样点全部塞进输入端,一方面输入维度太大,另一方面波形里大量信息是和故障无关的负荷波动与噪声,反而干扰分类。我常用的做法是从故障录波里提取一组物理意义明确的特征量,构成10到20维的特征向量。
特征量分三组。第一组是暂态幅值特征:故障后第一个半波内零序电流的峰值、暂态分量积分能量。第二组是极性特征:故障线路与非故障线路的首半波极性是相反的,通常用故障前后零序电流的相关系数来量化。第三组是频域特征:零序电流的五次谐波幅值、小波包分解后各频带能量占比。五次谐波在消弧线圈系统中仍有较好的区分度,因为消弧线圈只补偿基波,对五次谐波没有补偿作用。
特征量不是越多越好,我见过有人一口气提了40个特征,结果训练集精度极高、现场一测就废。特征之间强相关会把冗余信息喂给网络,增加过拟合风险。特征选择的做法是先做相关性分析,把相关系数超过0.85的成对特征只保留一个;再用交叉验证一个个试,看哪个特征剔除后精度掉得最明显,那个就是关键特征。
3.2 故障样本怎么生成、怎么标注
训练一个能用的选线模型,样本量至少要有几千组,现场故障录波根本没那么多,所以绝大多数样本要靠仿真生成。一般是在MATLAB/Simulink或ATP-EMTP里搭一个10kV配电系统模型,包含多条出线,然后做故障扫描:故障线路逐条设、故障初相角从0到360度步进、过渡电阻从1欧姆到1000欧姆对数分布、故障位置在线路的不同距离点。这样扫描出来的样本能覆盖大部分现场工况。
样本标注规则要非常明确。每条样本的标签就是故障线路编号,0到m-1。这里有一个关键细节:把母线本身发生故障的情况排除掉,或者单独标一类。我一开始没注意,把母线故障样本也混进线路故障样本里,网络怎么训都训不好——因为母线故障时所有线路的零序电流同向,特征模式和任何一条线路故障都不同,网络被这种“四不像”样本误导了。
生成样本后要做一次清洗。仿真收敛失败的样本、波形截断的样本、暂态特征明显异常的样本直接删掉。清洗逻辑不能只看波形,还要结合物理规律:比如金属性接地时故障线路零序电流方向必须和线路对地电容电流方向相反,反了说明数据对接有问题,检查线路参数设置而不是把样本强行喂给网络。
3.3 数据预处理与训练/验证/测试划分
预处理的第一步是归一化。不同特征的量纲差异很大,暂态电流峰值可能是几十安培,首半波极性只是个加减号,归一化到0到1区间后,网络训练才能稳定收敛。我用MinMaxScaler,把每个特征按训练集的最小值和最大值缩放。注意只能按训练集的统计量做缩放,再用同一组统计量去变换验证集和测试集,这叫做防止数据泄露。如果整体样本的统计量去做归一化,验证集的信息在训练阶段就泄露给了模型,测试精度会有虚高。
数据集划分上,我习惯按7:1.5:1.5分成训练集、验证集、测试集。训练集用来优化权重,验证集用来做早停判断和超参数选择,测试集只在全部训练结束后用一次,模拟现场盲测。这里有个容易犯的错:按故障线路来划分而不是按样本随机划分。比如10条出线,如果某条线路的样本全部落在测试集里,测试精度会低很多,但这恰恰反映了模型对“没见过线路”的真实泛化能力。我是建议两者都做:随机划分看整体精度,按线路划分看跨线路泛化能力,后者才是选线装置现场的实际情况。
4. 用Python搭一个小电流接地选线ANN模型:代码与参数
4.1 网络层数与神经元配置的确定方法
网络结构上我推荐两个隐含层,不要一上来就堆深。小电流接地选线的特征向量一般是10到20维,映射到m条线路的分类任务,复杂度不高,两个隐含层足够拟合。单隐含层有时候拟合不够,三个隐含层以上的收益很小,还增加过拟合风险和嵌入式部署时的计算负担。
隐含层神经元数的确定有一个经验公式:隐含层节点数约为输入维度与输出维度的几何平均数再加一个偏置项。我以输入维度16、输出维度10(10条线路)为例,第一个隐含层取32个神经元,第二个取16个,大致是逐层压缩结构。激活函数选tanh,输出层softmax。这里有一个参数细节:第二个隐含层的激活函数可以用ReLU也可以用tanh,ReLU能加速收敛,但可能出现神经元死亡,我备选了tanh做对比,差的精度在0.5%以内,实际部署选tanh更稳。
4.2 核心训练代码:Keras实现
下面是我在项目里实际用过的训练代码结构,Keras加TensorFlow后端。数据文件的字段名按你的实际特征列调整。
import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.callbacks import EarlyStopping from tensorflow.keras.utils import to_categorical # 读取仿真生成的故障样本集 df = pd.read_csv('fault_samples.csv') # 特征列:暂态零序电流峰值、首半波极性、五次谐波幅值、能量占比等 feature_cols = ['i_peak_0', 'polarity_0', 'harm5_0', 'energy_0', 'i_peak_1', 'polarity_1', 'harm5_1', 'energy_1'] X = df[feature_cols].values # 故障线路编号:0 ~ 9,代表10条出线 y_line = df['fault_line'].values # 归一化:只fit训练集 scaler = MinMaxScaler() X = scaler.fit_transform(X) # 按线路划分:保证每条线路的样本在训练/验证/测试里都有覆盖 X_train, X_test, y_train, y_test = train_test_split( X, y_line, test_size=0.2, stratify=y_line, random_state=42) X_train, X_val, y_train, y_val = train_test_split( X_train, y_train, test_size=0.15, stratify=y_train, random_state=42) # 标签转one-hot y_train_onehot = to_categorical(y_train, num_classes=10) y_val_onehot = to_categorical(y_val, num_classes=10) y_test_onehot = to_categorical(y_test, num_classes=10) # 构建网络:输入16维,两个隐含层,输出10类 model = Sequential([ Dense(32, activation='tanh', input_shape=(X_train.shape[1],)), Dropout(0.1), Dense(16, activation='tanh'), Dropout(0.1), Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 早停:监控验证集损失,连续10个epoch不降就停 early_stop = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True) history = model.fit(X_train, y_train_onehot, batch_size=64, epochs=200, validation_data=(X_val, y_val_onehot), callbacks=[early_stop], verbose=1) # 测试集盲测 test_loss, test_acc = model.evaluate(X_test, y_test_onehot, verbose=0) print('测试集准确率: {:.2f}%'.format(test_acc * 100))这段代码里有三个参数需要特别说明。第一,test_size和stratify的组合。小电流接地故障样本里各线路的样本量一般不均衡,用stratify按线路编号做分层抽样,保证训练集和测试集里每条线路的样本占比一致,避免某条线路样本全部进了测试集导致评估结果偏低。第二,Dropout的比率。我设0.1,取值比较保守。选线样本本身噪声大,Dropout太大会让网络欠拟合,太小则起不到正则化效果,0.1到0.2之间是需要调的区间。第三,early_stop的patience。选线模型的训练曲线波动比图像分类大,patience设5经常误停,设20又容易过拟合,10是一个折中,配合restore_best_weights取验证集最好的那一步权重。
4.3 训练过程的监控指标与保存策略
训练过程中我盯两个指标:验证集准确率和验证集损失差。光看准确率不够,因为准确率只反映分类正确与否,不反映概率输出的置信度。还要看模型输出的概率分布:如果故障线路的概率是0.45、次高概率是0.4,虽然分类正确,但置信度太低,现场不敢直接拉闸。我一般在训练结束后统计所有测试样本的“前两个输出概率差”,这个差值小于0.2的样本单独做一次分析,看看是哪类故障工况,再决定要不要补充这类样本重新训练。
模型保存用Keras的原生格式,权重和结构一起存下来。部署到嵌入式选线装置时,我一般把权重导出成C头文件格式,用一个轻量级前向传播函数做推理,不跑完整的TensorFlow运行时。保存时注意记录归一化器的参数,也就是每个特征的min和max,部署端要先用同一组参数归一化输入特征,再放进网络。很多人在这一步漏了归一化参数,现场推理结果完全对不上。
5. 小电流接地选线ANN模型的5个避坑点
5.1 消弧线圈补偿让稳态特征失效
现象:模型在仿真验证集上精度95%,投入中性点经消弧线圈接地的现场系统后,选线准确率直接掉到60%以下。原因:训练样本里的稳态零序电流幅值特征在消弧线圈补偿后不再满足“故障线路幅值最大”的规律。解决:样本集里针对消弧线圈系统单独生成一组补偿后的故障数据,特征提取时把稳态幅值的比重降下来,以暂态分量和五次谐波为主。
5.2 电弧接地带来的样本漂移
现象:训练时用固定过渡电阻的金属性接地样本居多,测试时遇到间歇性电弧接地,网络输出概率在两条线路上来回跳。原因:电弧电阻时变,零序电流波形被削顶,稳态和暂态特征都发生畸变,训练集里没见过这类波形。解决:用仿真模型里的电弧模型生成电弧接地样本,故障初相角45度附近的电弧不稳定区间重点补样本。样本覆盖不好的话,加一个规则前级:波形畸变率超过阈值时直接走首半波方向判据,不让网络输出。
5.3 过拟合:训练精度神化,验证集翻车
现象:训练集精度99.9%,验证集精度只有87%,且每次训练验证集精度抖动很大。原因:网络记住了仿真样本里的噪声细节而不是故障规律,网上常见原因是样本量不足或特征维度太高。解决:降低特征维度,把强相关的特征删掉;增加Dropout比率到0.2测试效果;最重要的还是补样本量,从2000组扩到5000组以上会有明显改善。
5.4 样本不平衡让网络学成“永远不报故障”
现象:10条线路的样本数量差异大,比如线路1只占了总样本的3%,训练后的模型对线路1的故障几乎不报。原因:交叉熵损失对所有类别一视同仁,多数类样本的梯度主导了训练方向,网络学到的决策边界偏向多数类。解决:给少数类样本加class_weight权重,或者用数据增强把少数线路的样本合成补足。我用过前者,效果好一些:线路1的类别权重设到和样本比例倒数成正比,训练后线路1的召回率能从40%提到85%。
5.5 隐含层神经元数量成了玄学
现象:同样的数据和训练配置,隐含层节点数32时验证集精度88%,改成48后反而降到84%。原因:节点数太多,网络容量过大,过拟合了;节点数太少则拟合能力不够。解决:不要只看一个指标。我会在8、16、32、64四个档位各跑3次,取验证集精度的均值和方差,选均值高、方差小的那一档。方差大说明这个节点数对随机初始化敏感,这个档位本身就不可靠。
6. 从仿真到现场:模型验证与嵌入式部署的最后一公里
6.1 用留出的故障样本做盲测
模型训练完,最怕的就是拿着训练集里的样本自测,觉得精度高就上现场。正确做法是把测试集样本当作“盲测数据”,永远不参与训练,只用来评估最终模型。但仿真盲测还不够,我建议做一次半实物测试:用继电保护测试仪回放一组现场实际录波数据,让部署了模型的前端装置去选线,看输出结果和当时的实际故障线路是否一致。这一步能暴露出仿真信号和真实录波之间的差异——比如录波里的直流衰减分量、CT饱和畸变,这些是仿真模型里很难还原的。
6.2 与规则判据做投票融合
纯神经网络选线,现场不敢直接用。我见过不少同行踩坑,网络训练得漂漂亮亮,一上现场遇到CT饱和电压突变就选错了。稳妥方案是让神经网络和传统判据做两个通道的融合。常见做法是:用零序电压突变启动,先跑一遍首半波方向判据和五次谐波比幅法,再让神经网络输出一个结果,几个判据一致才出口跳闸;不一致则只报“疑似故障”,让运行人员人工确认。
6.3 把权重导出到嵌入式装置
部署前要把网络从Keras里搬出来。我在项目里的做法是先把训练好的权重存成numpy数组格式,再写一个纯C的函数做前向传播,中间只涉及乘加运算和tanh查表。这个函数可以跑在微控制器上,耗时大约几毫秒,实时性没有问题。导出时注意数据精度:Keras训练权重是float32,嵌入式端也要用float32,用float16的话精度差别不大但可能在某些边界工况下有偏差。归一化参数和网络权重放在同一个头文件里,避免现场调试时两边参数对不上。
这些年做选线模型下来,我最深的体会是:神经网络不是魔法,喂进去什么样的故障样本,它就给你什么样的选线结果。训练代码两周能写完,但把样本覆盖、特征选择、消弧线圈工况这些细节摸透,可能要花上半年。希望帮到你。
本文还有配套的精品资源,点击获取