利用深度学习进行化工过程故障检测

这个例子展示了如何使用模拟数据来训练一个能够检测化学过程中故障的神经网络。该网络对仿真过程中的故障具有较高的检测精度。典型的工作流程如下:

  1. 预处理的数据

  2. 设计层架构

  3. 培训网络

  4. 执行验证

  5. 测试网络

下载数据集

本例使用了matlab格式的文件,这些文件由MathWorks®从田纳西伊士曼进程(TEP)模拟数据转换而来[1]。这些文件可以从MathWorks支持文件站点获得。万博1manbetx看到免责声明

该数据集由四个部分组成 - 无故障培训,免费故障检测,故障训练,和错误的测试。单独下载各个文件。

url =“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultytesting.mat”;websave (“faultytesting.mat”url);url =“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultytraining.mat”;websave (“faultytraining.mat”url);url ='//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultfreetesting.mat';websave (“faultfreetesting.mat”url);url =“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/predmaint/chemical-process-fault-detection-data/faultfreetraining.mat”;websave (“faultfreetraining.mat”url);

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

负载(“faultfreetesting.mat”);负载(“faultfreetraining.mat”);负载(“faultytesting.mat”);负载(“faultytraining.mat”);

每个组件都包含来自模拟的数据,这些数据针对两个参数的每一个排列运行:

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

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

每个模拟的长度是依赖于数据集。每三分钟所有模拟进行了采样。

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

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

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

  • 柱1(faultNumber)表示故障类型,故障类型从0到20不等。故障号0表示无故障,而故障号1到20表示TEP中的不同故障类型。

  • 第2栏(simulationRun)表示TEP模拟运行以获取完整数据的次数。在训练和测试数据集中,所有故障号的运行次数从1到500不等。每一个simulationRun值表示为仿真一个不同的随机发生器的状态。

  • 列3 (样本)表示每次模拟记录TEP变量的次数。训练数据集的数量从1到500,测试数据集的数量从1到960。TEP变量(第4至55列)在25小时和48小时内每3分钟采样一次,分别用于训练和测试数据集。

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

  • 45 - 55(列xmv_1通过xmv_11)包含TEP的操作变量。

检查两个文件的子部分。

头(faultfreetraining, 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_6 xmv_7 xmv_8 xmv_9 xmv_10 xmv_11 ___________ _________________ ________累积累积累积累积_________说说说说说说说说说说说说说说说看上去说长得一样交交交交0 1 1 0.25038 3674 4529 9.232 26.889 42.402 2704.3 74.863120.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 2705 75 0.25109 3659.4 4556.6 9.4264 26.721 42.576 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.7761.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 1 3 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.66661.275 22.38 40.244 38.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.1 53.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_6 xmv_7 xmv_8 xmv_9 xmv_10 xmv_11 ___________ _________________ ________累积累积累积累积_________说说说说说说说说说说说说说说说看上去说长得一样交交交交1 1 1 3674 4529 0.25038 9.232 26.889 42.402 2704.3 74.863120.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 2705 75 0.25109 3659.4 4556.6 9.4264 26.721 42.576 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.7761.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 1 3 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.66661.275 22.38 40.244 38.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.1 53.946 24.725 59.856 22.277 40.257 38.072 47.541 47.658 41.643 18.089

干净的数据

具有故障数字3,9在训练和测试数据集都删除数据条目,和15。这些故障代码不可识别,以及相关的模拟结果是错误的。

faultytesting (faultytesting。faultNumber == 3,:) = [];faultytesting (faultytesting。faultNumber == 9,:) = [];faultytesting (faultytesting。faultNumber == 15,:) = [];faultytraining (faultytraining。faultNumber == 3,:) = [];faultytraining (faultytraining。faultNumber == 9,:) = [];faultytraining (faultytraining。faultNumber == 15,:) = [];

把数据

将培训数据划分为培训和验证数据,预留20%的培训数据用于验证。通过使用验证数据集,可以在调优模型超参数时评估模型是否适合于训练数据集。数据分割是防止网络过拟合和欠拟合的常用方法。

获取错误和无错误训练数据集中的总行数。

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

模拟运行是次重复TEP过程与特定的故障类型的数目。从训练数据集,以及从测试数据集得到最大的模拟运行。

msTrain = MAX(faultfreetraining.simulationRun);MSTEST = MAX(faultytesting.simulationRun);

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

rTrain = 0.80;ceil(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 {,,}):;

网络设计和预处理

最终的数据集(包括训练、验证和测试数据)包含52个信号,包含500个统一的时间步长。因此,需要对信号或序列进行正确的故障编号分类,这就成为序列分类的一个问题。

  • 长短时记忆(LSTM)网络适用于序列数据的分类。

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

  • 一个LSTM网络,您可以输入序列数据转换成基于序列数据的各个时间步骤的网络,并作出预测。有关LSTM网络的详细信息,请参阅长短时记忆网络

  • 训练网络对序列进行分类trainNetwork功能,您必须首先预处理数据。数据必须是在单元阵列,其中,所述单元阵列中的每个元素是表示在单个模拟的一组52点的信号的矩阵。在单元阵列中的每个矩阵是用于TEP的特定模拟组信号和可以是故障或无故障。各组信号点,一个特定的故障类从0到20的范围。

正如前面在数据集一节中描述的,数据包含52个变量,这些变量的值在模拟的一段时间内被记录。的样本变量表示这52个变量在一次模拟运行中被记录的次数。的最大值样本变量是在训练数据集500和960中的测试数据集。因此,对于每个模拟,有一组52点的信号长度为500或960中的每一个集的信号属于在范围0运行TEP和点的一个特定的故障类型的特定模拟 - 20。

训练和测试数据集都包含500个仿真为每个故障类型。(从训练)百分之二十下保持留下每个故障类型和每个故障类型100次的模拟的验证数据400次的模拟训练数据集验证。使用辅助函数helperPreprocess要创建信号集,其中每个集合是单元数组中表示单个TEP模拟的单个元素中的一个双矩阵。因此,最终的培训、验证和测试数据集的大小如下:

  • 的大小Xtrain:(模拟总数)X(故障类型总数)= 400 X 18 = 7200

  • 的大小XVal:(模拟总数)X(故障类型总数)= 100 X 18 = 1800

  • 的大小Xtest:(模拟的总数)×(故障类型的总数)= 500×18 = 9000

在该数据集合中,第一500个模拟是的0故障类型(无故障)和后续故障模拟的顺序是已知的。这些知识支持为培训、验证和测试数据集创建真实的响应。

Xtrain = helperPreprocess (trainingData sampleTrain);Ytrain =分类([0 (msTrain 1); repmat([1、2、4:8, 14,十六20],1,msTrain) ');XVal = helperPreprocess (validationData sampleTrain);YVal =分类([0 (msVal 1); repmat([1、2、4:8, 14,十六20],1,msVal) ');Xtest = helperPreprocess (testingData sampleTest);欧美=分类([0 (msTest 1); repmat([1、2、4:8, 14,十六20],1,msTest) ');

规范化的数据集

标准化是一种技术,它将数据集中的数值缩放到一个通用的比例,而不改变数值范围的差异这种技术保证了具有较大值的变量确实在训练不是支配其他变量。它还在转换较高范围为更小的范围内(通常为-1到1)的数值,而不会失去对于训练所需的任何重要信息。

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

tMean =平均(trainingData(:,4:结束))';tSigma = STD(trainingData(:,4:结束))';

使用辅助函数helperNormalize根据训练数据的均值和标准差对三个数据集中的每个单元进行归一化处理。

Xtrain = helperNormalize(Xtrain,tMean,tSigma);XVAL = helperNormalize(XVAL,tMean,tSigma);XTEST = helperNormalize(XTEST,tMean,tSigma);

可视化数据

Xtrain数据组包含400无故障模拟,接着6800故障simulations.Visualize的无故障和错误的数据。首先,创建无故障数据的曲线图。在这个例子中,情节和标签中仅10个信号的目的Xtrain数据集创建一个易于阅读的身影。

图;splot = 10;情节(Xtrain {1} (1:10:) ');包含(“时间步”);标题(“训练的观察没有缺陷的数据”);传奇(“信号”+字符串(1:splot),“位置”,“northeastoutside”);

现在,通过绘制400之后的单元格数组元素,将无故障图与有故障图进行比较。

图;情节(Xtrain {1000} (1:10:) ');包含(“时间步”);标题(“培训为观察错误数据”);传奇(“信号”+字符串(1:splot),“位置”,“northeastoutside”);

分层架构和培训选项

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

  • 指定输入层sequenceInputLayer为相同的大小作为输入信号的(52)的数量。

  • 指定3个LSTM隐藏层,包含52、40和25个单元。本规范的灵感来自于在[2]。有关使用LSTM网络进行序列分类的更多信息,请参见利用深度学习进行序列分类

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

  • 最后,为了分类,包括一个与输出类的数量(18)相同大小的全连接层。在全连接层之后,包括一个softmax层,它为多类问题中的每个类分配十进制概率(预测可能性),以及一个分类层,根据softmax层的输出输出最终的故障类型。

numSignals = 52个;numHiddenUnits2 = 52个;numHiddenUnits3 = 40;numHiddenUnits4 = 25;numClasses = 18;层= [sequenceInputLayer numSignals lstmLayer (numHiddenUnits2,“OutputMode”,“序列”)dropoutLayer (0.2) lstmLayer (numHiddenUnits3“OutputMode”,“序列”)dropoutLayer (0.2) lstmLayer (numHiddenUnits4“OutputMode”,“最后一次”) dropoutLayer(0.2)全连接层(numClasses) softmaxLayer classificationLayer [;

设置培训选项trainNetwork用途。

维护名称-值对的默认值“ExecutionEnvironment”“汽车”。有了这个设置,软件就会自动选择执行环境。如果GPU可用(需要并行计算工具箱™和CUDA®启用GPU计算能力3.0或更高),则该软件使用GPU。否则,软件将使用CPU。因为这个例子使用了大量的数据,使用GPU大大加快了训练时间。

设置名称-值参数对“洗牌”“every-epoch”避免在每个epoch中丢弃相同的数据。

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

maxEpochs = 30;miniBatchSize = 50;选择= trainingOptions (“亚当”,“ExecutionEnvironment”,“汽车”,'GradientThreshold'1,“MaxEpochs”maxEpochs,“MiniBatchSize”miniBatchSize,“洗牌”,“every-epoch”,“放牧”,0,“阴谋”,“训练进步”,“ValidationData”,{XVal, YVal});

列车网络的

使用LSTM网络进行培训trainNetwork

净= trainNetwork(Xtrain,Ytrain,层,选项);

训练进度图显示了网络精度的曲线图。该图的右侧,查看了训练时间和设置信息。

测试网络

在测试集中运行训练好的网络,预测信号中的故障类型。

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

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

acc = sum(Ypred == Ytest)./numel(Ypred)
acc = 0.9992

高精度表明该神经网络能够顺利用最少的错误识别看不见信号的故障类型。因此,精确度更高,更好的网络。

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

confusionchart(欧美,Ypred);

使用混淆矩阵,可以评估分类网络的有效性。混淆矩阵,其主对角线数值和零别处。本例中的训练的网络是有效的和分类的信号超过99%正确。

参考文献

[1] Rieth, C. A., B. D. Amsel, R. Tran。和B. Maia。附加田纳西州伊士曼过程模拟数据异常检测评估。Harvard Dataverse, Version 1, 2017.https://doi.org/10.7910/DVN/6C3JR1

[2] Heo, S.,和J. H. Lee。使用人工神经网络进行故障检测和分类。Department of Chemical and Biomolecular Engineering, Korea Advanced Institute of Science and Technology.

辅助函数

helperPreprocess

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

函数H = size(mydata);处理= {};ind = 1:limit:H x = mydata(ind:(ind+(limit-1)),4:end);处理=[处理;x ');结束结束

helperNormalize

辅助函数helperNormalize使用数据、平均值和标准偏差对数据进行规范化。

函数data = helperNormalize(数据、m s)IND = 1:大小(数据)数据{IND} =(数据{IND}  - 米)./秒;结束结束

另请参阅

|||

相关的话题