主要内容

基于深度学习的化工过程故障检测

此示例说明如何使用模拟数据训练可以在化学过程中检测故障的神经网络。网络以高精度检测模拟过程中的故障。典型的工作流程如下:

  1. 预处理的数据

  2. 设计层架构

  3. 培训网络

  4. 执行验证

  5. 测试网络

下载数据集

本例使用MathWorks®从Tennessee Eastman Process (TEP)模拟数据转换的matlab格式文件[1].Mathworks支持文件站点提供这些文件。万博1manbetx看看免责声明

该数据集由四部分组成:无故障训练、无故障测试、故障训练和故障测试。单独下载每个文件。

URL =.“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultytesting.mat”;WebSave('故障.Mat',URL);URL =.'//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultytraining.mat';WebSave('故障训练.Mat',URL);URL =.“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultfreetesting.mat”;WebSave('afficefreeesting.mat',URL);URL =.'//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultfreetraining.mat';WebSave(“faultfreetraining.mat”,URL);

将下载的文件加载到MATLAB®工作空间。

负载('afficefreeesting.mat');负载(“faultfreetraining.mat”);负载('故障.Mat');负载('故障训练.Mat');

每个组件包含来自模拟的数据,为两个参数的每一个排列运行:

  • 故障编号 - 对于故障数据集,从1到20的整数值表示不同的模拟故障。对于无故障数据集,值为0。

  • 模拟运行—对于所有数据集,从1到500的整数值,其中每个值代表模拟的唯一随机生成器状态。

每个模拟的长度取决于数据集。所有的模拟每三分钟进行一次采样。

  • 训练数据集包含来自25小时模拟的500个时间样本。

  • 测试数据集包含来自48小时模拟的960个时间样本。

每个数据帧的列中有以下变量:

  • 第1列(faultNumber)表示故障类型,取值范围为0 ~ 20。故障号0表示无故障,故障号1 ~ 20表示TEP中不同的故障类型。

  • 列2 (模拟奖励)表示TEP仿真ran获取完整数据的次数。在培训和测试数据集中,所有故障编号的运行数量为1到500。每一个模拟奖励值表示模拟的不同随机生成器状态。

  • 列3 (样品)表示每仿真记录Tep变量的次数。对于训练数据集的数量从1到500变化为1到500,用于测试数据集。Tep变量(第4至55列)每3分钟对持续时间为25小时,48小时分别进行训练和测试数据集。

  • 列4-44 (xmeas_1通过xmeas_41)包含TEP的测量变量。

  • 列45-55(xmv_1通过XMV_11)包含TEP的被操纵的变量。

检查两个文件的小节。

头(过滤,4)
ans =表4×55faultNumber simulationRun样品xmeas_1 xmeas_2 xmeas_3 xmeas_4 xmeas_5 xmeas_6 xmeas_7 xmeas_8 xmeas_9 xmeas_10 xmeas_11 xmeas_12 xmeas_13 xmeas_14 xmeas_15 xmeas_16 xmeas_17 xmeas_18 xmeas_19 xmeas_20 xmeas_21 xmeas_22 xmeas_23 xmeas_24 xmeas_25 xmeas_26 xmeas_27 xmeas_28 xmeas_29 xmeas_30 xmeas_31 xmeas_32 xmeas_33 xmeas_34 xmeas_35 xmeas_36 xmeas_37 xmeas_38 xmeas_39 xmeas_40 xmeas_41 xmv_1 xmv_2 xmv_3 xmv_4 xmv_5 xmv_6xmv_7 xmv_8 xmv_9 xmv_10 xmv_11 ___________ _____________ ______ _______ _______ _______ _______ _______ _______ _______ _______ _______ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ____________ ______ ______ ______ ______ ______ _____________ ______ ______ 0 1 0:25038 3674 4529 9.232 26.889 42.402 2704.3 74.863 120.41 0.33818 80.044 51.435 2632.9 25.029 50.528 3101.1 22.819 65.732 229.61 341.22 94.64 77.047 32.188 8.8933 26.383 6.882 18.776 1.6567 32.958 13.823 23.978 1.2565 18.579 2.2633 4.8436 2.2986 0.017866 0.8357 0.098577 53.724 43.828 62.881 53.744 24.657 62.544 22.137 39.935 42.323 47.757 47.51 41.258 18.447 0 1 2 0.25109 3659.4 4556.6 9.426426.721 42.576 2705 75 120.41 0.3362 80.078 50.154 2633.8 24.419 48.772 3102 23.333 65.716 230.54 341.3 94.595 77.434 32.188 8.8933 26.383 6.882 18.776 1.6567 32.958 13.823 23.978 1.2565 18.579 2.2633 4.8436 2.2986 0.017866 0.8357 0.098577 53.724 43.828 63.132 53.414 24.588 59.259 22.084 40.176 38.554 43.692 47.427 41.359 17.194 0 13 0.25038 3660.3 4477.8 9.4426 26.875 42.07 2706.2 74.771 120.42 0.33563 80.22 50.302 2635.5 25.244 50.071 3103.5 21.924 65.732 230.08 341.38 94.605 77.466 31.767 8.7694 26.095 6.8259 18.961 1.6292 32.985 13.742 23.897 1.3001 18.765 2.2602 4.8543 2.39 0.017866 0.8357 0.098577 53.724 43.828 63.117 54.357 24.666 61.275 22.38 40.24438.99 46.699 47.468 41.199 20.53 0 1 4 0.24977 3661.3 4512.1 9.4776 26.758 42.063 2707.2 75.224 120.39 0.33553 80.305 49.99 2635.6 23.268 50.435 3102.8 22.948 65.781 227.91 341.71 94.473 77.443 31.767 8.7694 26.095 6.8259 18.961 1.6292 32.985 13.742 23.897 1.3001 18.765 2.2602 4.8543 2.39 0.017866 0.8357 0.098577 53.724 43.828 63.153.946 24.725 59.856 22.277 40.257 38.072 47.541 47.658 41.643 18.089
头(faultytraining, 4)
ans =表4×55faultNumber simulationRun样品xmeas_1 xmeas_2 xmeas_3 xmeas_4 xmeas_5 xmeas_6 xmeas_7 xmeas_8 xmeas_9 xmeas_10 xmeas_11 xmeas_12 xmeas_13 xmeas_14 xmeas_15 xmeas_16 xmeas_17 xmeas_18 xmeas_19 xmeas_20 xmeas_21 xmeas_22 xmeas_23 xmeas_24 xmeas_25 xmeas_26 xmeas_27 xmeas_28 xmeas_29 xmeas_30 xmeas_31 xmeas_32 xmeas_33 xmeas_34 xmeas_35 xmeas_36 xmeas_37 xmeas_38 xmeas_39 xmeas_40 xmeas_41 xmv_1 xmv_2 xmv_3 xmv_4 xmv_5 xmv_6xmv_7 xmv_8 xmv_9 xmv_10 xmv_11 ___________ _____________ ______ _______ _______ _______ _______ _______ _______ _______ _______ _______ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ____________ ______ ______ ______ ______ ______ _____________ ______ ______ _________________________________0.25038 3674 4529 9.232 26.889 42.402 2704.3 74.863 120.41 0.33818 80.044 51.435 2632.9 25.029 50.528 3101.1 22.819 65.732 229.61 341.22 94.64 77.047 32.188 8.8933 26.383 6.882 18.776 1.6567 32.958 13.823 23.978 1.2565 18.579 2.2633 4.8436 2.2986 0.017866 0.8357 0.098577 53.724 43.828 62.881 53.744 24.657 62.544 22.137 39.935 42.323 47.757 47.51 41.258 18.447 1 1 2 0.25109 3659.4 4556.6 9.426426.721 42.576 2705 75 120.41 0.3362 80.078 50.154 2633.8 24.419 48.772 3102 23.333 65.716 230.54 341.3 94.595 77.434 32.188 8.8933 26.383 6.882 18.776 1.6567 32.958 13.823 23.978 1.2565 18.579 2.2633 4.8436 2.2986 0.017866 0.8357 0.098577 53.724 43.828 63.132 53.414 24.588 59.259 22.084 40.176 38.554 43.692 47.427 41.359 17.194 1 13 0.25038 3660.3 4477.8 9.4426 26.875 42.07 2706.2 74.771 120.42 0.33563 80.22 50.302 2635.5 25.244 50.071 3103.5 21.924 65.732 230.08 341.38 94.605 77.466 31.767 8.7694 26.095 6.8259 18.961 1.6292 32.985 13.742 23.897 1.3001 18.765 2.2602 4.8543 2.39 0.017866 0.8357 0.098577 53.724 43.828 63.117 54.357 24.666 61.275 22.38 40.24438.99 46.699 47.468 41.199 20.53 1 1 4 0.24977 3661.3 4512.1 9.4776 26.758 42.063 2707.2 75.224 120.39 0.33553 80.305 49.99 2635.6 23.268 50.435 3102.8 22.948 65.781 227.91 341.71 94.473 77.443 31.767 8.7694 26.095 6.8259 18.961 1.6292 32.985 13.742 23.897 1.3001 18.765 2.2602 4.8543 2.39 0.017866 0.8357 0.098577 53.724 43.828 63.153.946 24.725 59.856 22.277 40.257 38.072 47.541 47.658 41.643 18.089

清洁数据

删除训练和测试数据集中故障编号为3、9和15的数据条目。这些故障数字无法识别,并且相关的模拟结果是错误的。

故障(故障,故障.FaultNumber == 3,:) = [];故障(故障,错误.FaultNumber == 9,:) = [];故障(故障,故障.FaultNumber == 15,:) = [];致命训练(故障训练.FaultNumber == 3,:) = [];致命训练(故障训练.FaultNumber == 9,:) = [];致命训练(故障训练.FaultNumber == 15,:) = [];

把数据

将培训数据除以培训和验证数据,保留20%的培训数据进行验证。使用验证数据集使您可以在调整模型超参数时评估培训数据集合的型号。数据拆分通常用于防止网络过度拟合和垫地。

获取故障和无故障培训数据集中的行总行数。

H1 =身高(faultfreetraining);H2 =身高(faultytraining);

模拟运行是针对特定故障类型重复TEP过程的次数。从训练数据集和测试数据集获得最大的模拟运行。

msTrain = max (faultfreetraining.simulationRun);msTest = max (faultytesting.simulationRun);

计算验证数据的最大模拟运行次数。

rTrain = 0.80;msVal = cstr (msTrain*(1 - rTrain)); / /输出msTrain = msTrain * rTrain;

获取最大样本数或时间步长(即,TEP模拟期间记录数据的最大次数)。

sampleTrain = max (faultfreetraining.sample);sampleTest = max (faultfreetesting.sample);

获取故障和故障训练数据集中的分区点(行号)以从训练数据集创建验证数据集。

rowLim1 =装天花板(rTrain * H1);rowLim2 =装天花板(rTrain * H2);trainingData = [faultfreetraining {1: rowLim1,:};faultytraining {1: rowLim2,:}];validationData = [faultfreetraining{rowLim1 + 1:end,:};faultytraining {rowLim2 + 1:,:}];testingData = [faultfreetesting {:,:};faultytesting {,,}):;

网络设计与预处理

最终数据集(由培训,验证和测试数据组成)包含具有500个均匀时间步长的52个信号。因此,信号或序列需要被分类为其正确的故障编号,这使得它是序列分类的问题。

  • 长短期内存(LSTM)网络适用于序列数据的分类。

  • LSTM网络适用于时序数据,因为它们倾向于记住过去信号的唯一性以便对新信号进行分类

  • LSTM网络允许您将序列数据输入到网络中,并根据序列数据的单个时间步长进行预测。有关LSTM网络的更多信息,请参见长短期记忆网络

  • 培训网络以使用该网络对序列进行分类trainNetwork函数时,必须先对数据进行预处理。数据必须在单元阵列中,其中单元阵列的每个元素都是一个矩阵,在单个模拟中代表一组52个信号。单元阵列中的每个矩阵是TEP特定模拟的一组信号,可以是错误的,也可以是无错误的。每一组信号指向从0到20的特定故障类别。

如前所述在数据集部分中,数据包含52个变量,其值在模拟中的一定时间记录在一定的时间内。当样品变量表示在一个仿真运行中记录了这52变量的次数。最大值样品变量在训练数据集中为500,在测试数据集中为960。因此,对于每个模拟,都有一组长度为500或960的52个信号。每一组信号属于TEP的特定模拟运行,并指向0 - 20范围内的特定故障类型。

训练和测试数据集都包含每种故障类型的500个模拟。20%(来自训练)用于验证,这使得训练数据集每个故障类型有400个模拟,验证数据每个故障类型有100个模拟。使用helper函数Helperpreprocess.创建信号集,其中每个信号集是表示单个TEP模拟的单元阵列单个元素中的双矩阵。因此,最终的训练、验证和测试数据集的大小如下:

  • sizeXTrain.:(仿真总数)x(故障类型总数)= 400 x 18 = 7200

  • sizeXVal:(仿真总数)x(故障类型总数)= 100 x 18 = 1800

  • sizeXTest.:(模拟总数)X(故障类型总数)= 500 × 18 = 9000

在数据集中,前500个模拟是0.错误类型(无故障)和随后的错误模拟的顺序是已知的。此知识可以创建培训,验证和测试数据集的真正响应。

XTrain = Helperpreprocess(TrainingData,Sampletrain);YTrain =分类([零(Mstrain,1); Repmat([1,2,4:8,10:14,16:20],1,Mstrain)']);xval = helperpreprocess(validationdata,sampletrain);YVAL =分类([零(MSVAL,1); REPMAT([1,2,4:8,10:14,16:20],1,MSVAL)']);xtest = helperpreprocess(testingdata,sampletest);Yest =分类([零(MSTEST,1); REPMAT([1,2,4:8,10:14,16:20],1,MSTEST)']);

标准化数据集

规范化是一种将数据集中的数值按公共比例缩放而不扭曲值范围差异的技术这种技术确保了一个值较大的变量不会在训练中支配其他变量。它还将较大范围的数值转换为较小范围(通常是-1到1),而不会丢失任何训练所需的重要信息。

使用来自训练数据集中所有模拟的数据计算52个信号的平均值和标准偏差。

tMean =意味着(trainingData(:, 4:结束))';tSigma =性病(trainingData(:, 4:结束))';

使用helper函数扶手基于训练数据的平均值和标准偏差,在三个数据集中对每个单元的归一化。

Xtrain = helperNormalize(Xtrain, tMean, tSigma);XVal = helperNormalize(XVal, tMean, tSigma);Xtest = helperNormalize(Xtest, tMean, tSigma);

可视化数据

XTrain.数据集包含400个无故障模拟和6800个故障模拟。可视化无故障和故障数据。首先,创建一个无故障数据的图。为本例的目的,只绘制和标记10个信号XTrain.数据集创建一个易于阅读的数字。

图;脾= 10;绘图(Xtrain {1}(1:10,:)');Xlabel(“时间步”);标题(“非错误数据的训练观察”);传说(“信号”+字符串(1:符号),'位置'“northeastoutside”);

现在,通过在400之后绘制任意单元阵列元素来比较无故障图和故障图。

图;绘图(XTrain {1000}(1:10,:)');Xlabel(“时间步”);标题(《错误数据的训练观察》);传说(“信号”+字符串(1:符号),'位置'“northeastoutside”);

层架构和培训选项

LSTM层是序列分类的一个很好的选择,因为LSTM层往往只记住输入序列的重要方面。

  • 指定输入层sequenceInputlayer.与输入信号的数量(52)相同大小。

  • 使用52,40和25个单位指定3个LSTM隐藏图层。本规范由实验的启发是在进行中进行的[2].有关使用LSTM网络进行序列分类的更多信息,请参见使用深度学习序列分类

  • 在LSTM层之间添加3个dropout层,以防止过拟合。dropout层以给定的概率将下一层的输入元素随机设置为零,这样网络就不会对该层中的一小组神经元变得敏感

  • 最后,对于分类,包括与输出类的数量相同的尺寸的完全连接层(18)。在完全连接的层之后,包括将十进制概率(预测可能性)分配给多级问题的每个类的软Max层,以及基于来自Softmax层的输出输出最终故障类型的分类层。

numsignals = 52;numhidendunits2 = 52;numhidendunits3 = 40;numhidendunits4 = 25;numclasses = 18;层= [......sequenceInputlayer(numsignals)lstmlayer(numhidentunits2,“OutputMode”“序列”)DropoutLayer(0.2)LSTMLAYER(numhidentunits3,“OutputMode”“序列”)DropoutLayer(0.2)LSTMLAYER(NumHiddenUnits4,“OutputMode”'最后') dropoutLayer(0.2) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];

设置培训选项trainNetwork用途。

保持名称-值对的默认值“ExecutionEnvironment”as.“汽车”.使用此设置,软件将自动选择执行环境。默认情况下,trainNetwork如果一个可用的GPU,则使用GPU,否则,它使用CPU。GPU培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持设备的信息,请参阅万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱).因为此示例使用大量数据,所以使用GPU速度显着加速训练时间。

设置名称-值参数对“洗牌”到目前为止'每个时代'避免每个时代丢弃相同的数据。

有关深度学习的培训选项的更多信息,请参见培训选项

maxEpochs = 30;miniBatchSize = 50;选择= trainingOptions (“亚当”......“ExecutionEnvironment”“汽车”......“GradientThreshold”, 1......'maxepochs',maxepochs,......“MiniBatchSize”miniBatchSize,......“洗牌”'每个时代'......“详细”0,......'plots''培训 - 进步'......'vightationdata', {XVal, YVal});

火车网络

使用LSTM网络使用trainNetwork

网= trainNetwork (Xtrain、Ytrain层,选择);

训练进度图显示了网络的准确性。在图的右侧,可以查看训练时间和设置信息。

测试网络

在测试集上运行培训的网络并预测信号中的故障类型。

Xtest Ypred =分类(净,......“MiniBatchSize”miniBatchSize,......“ExecutionEnvironment”“汽车”);

计算准确性。准确性是测试数据中的真实标签数与分类相匹配分类除以测试数据中的图像数量。

ACC = SUM(YPRED == YTEST)./ NUMEL(YPRED)
acc = 0.9992

较高的准确率表明,该神经网络能够以最小的误差成功地识别不可见信号的故障类型。因此,准确率越高,网络就越好。

使用测试信号的真实类别标签绘制混淆矩阵,以确定网络对每个故障的识别程度。

ConfusionChart(Yest,Ypred);

使用混淆矩阵,您可以评估分类网络的有效性。混淆矩阵在主对角线上有数值,在其他地方有零。本例中经过训练的网络是有效的,能够正确分类99%以上的信号。

参考资料

[1] Rieth,C.A.,B. D. Amsel,R.Tran。和B. Maia。“额外的田纳西州Eastman流程用于异常检测评估的模拟数据。”哈佛Dativerse,版本1,2017。https://doi.org/10.7910/dvn/6c3jr1.

[2] Heo,S.和J. H. Lee。“使用人工神经网络的故障检测和分类。”韩国化学与生物分子工程系,韩国先进科技学院学。

辅助函数

Helperpreprocess.

辅助函数Helperpreprocess.使用最大样本数对数据进行预处理。样本号表示信号长度,它在整个数据集中是一致的。for循环用信号长度滤波器遍历数据集,形成52个信号的集合。每个集合是单元格数组的一个元素。每个单元阵列代表一个单独的模拟。

功能H = size(mydata);处理= {};IND = 1:限制:H X = MyData(IND :( IND +(IND +(IND-1)),4:结束);处理= [处理;x'];结束结束

扶手

辅助函数扶手使用数据,平均值和标准偏差来标准化数据。

功能数据= HelperNormalize(数据,M,S)印第安纳州= 1:尺寸数据(数据){印第安纳}={印第安纳}- m(数据)/ s;结束结束

另请参阅

|||

相关主题