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

这个例子说明了如何使用仿真数据来训练,可以在一个化学过程检测故障的神经网络。网络检测精度高的模拟过程中的故障。典型的工作流程如下:

  1. 预处理的数据

  2. 设计层架构

  3. 培训网络

  4. 执行验证

  5. 测试网络

下载数据集

本例使用了matlab格式的文件,这些文件由MathWorks®从田纳西伊士曼进程(TEP)模拟数据转换而来[1]。这些文件可在MathWorks的支持文件的网站。金宝app查看放弃

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

URL =“//www.tatmou.com/金宝appsupportfiles/predmaint/chemical-process-fault-detection-data/faultytesting.mat”;websave('faultytesting.mat'URL);URL ='//www.tatmou.com/金宝appsupportfiles/predmaint/chemical-process-fault-detection-data/faultytraining.mat';websave('faultytraining.mat'URL);URL =“//www.tatmou.com/金宝appsupportfiles/predmaint/chemical-process-fault-detection-data/faultfreetesting.mat”;websave('faultfreetesting.mat'URL);URL ='//www.tatmou.com/金宝appsupportfiles/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模拟RAN以获得完整的内容。在训练和测试数据集,运行的数量而变化,从1到500的所有故障代码。一切simulationRun值表示用于模拟的不同随机生成器状态。

  • 列3 (样品)表示次TEP变量的数量每模拟记录。数从1变化至500用于训练数据集和从1到960,用于测试数据集。在TEP变量(4到55列)每3分钟进行25个小时和48小时的训练和测试数据集的持续时间分别取样。

  • 列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_6xmv_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.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 ___________ _____________ ______ _______ _______ _______ _______ _______ _______ _______ _______ _______ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ________ ____________ ______ ______ ______ ______ ______ ______ ______ ______ ______ 1 1 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 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的数据条目。这些故障编号无法识别,相关的模拟结果是错误的。

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。每组信号都属于TEP的特定模拟运行,并指向0 - 20范围内的特定故障类型。

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

  • 尺寸Xtrain:(模拟的总数)×(故障类型的总数)= 400×18 = 7200

  • 尺寸XVAL:(模拟的总数)×(故障类型的总数)= 100×18 = 1800

  • 尺寸XTEST:(模拟总数)X(故障类型总数)= 500 X 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);Ytest =分类([零(MSTEST,1); repmat([1,2,4:8,10:14,16:20],1,MSTEST)']);

数据标准化集

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

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

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

使用辅助函数helperNormalize申请归到每个细胞中基于训练数据的平均值和标准偏差的三组数据。

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

数据可视化

Xtrain数据集包含400个无故障模拟和6800个故障模拟。可视化无故障和错误的数据。首先,创建一个无故障数据图。在本例中,仅绘制和标记10个信号Xtrain创建易于阅读的图形的数据集。

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

现在,400之后绘制的任何单元格数组元素的比较无故障打印到错误的情节。

数字;情节(Xtrain {1000}(1:10,:)');xlabel(“时间步”);标题(“错误数据的训练观察”);传说(“信号”+串(1:splot),'位置'“northeastoutside”);

分层架构和培训选项

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

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

  • 指定与52,40,和25个单位3 LSTM隐藏层。通过实验进行在本说明书中的启发[2]。有关使用LSTM网络进行序列分类的更多信息,请参见序划分使用Deep学习

  • 在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用途。

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

设置名称-值参数对“洗牌”“每个历元”避免丢弃每一个时代相同的数据。

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

maxEpochs = 30;miniBatchSize = 50;选择= trainingOptions (“亚当”...“ExecutionEnvironment”“汽车”...“GradientThreshold”,1...'MaxEpochs',maxEpochs,...“MiniBatchSize”miniBatchSize,...“洗牌”“每个历元”...“详细”0,...“情节”“训练进度”...'ValidationData',{XVal, YVal});

列车网络

利用训练LSTM网络trainNetwork

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

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

考试网

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

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

计算精度。精度是从匹配分类的是,在测试数据真实的标签数分类通过图像的在测试数据数除以。

ACC =总和(Ypred == Ytest)./ numel(Ypred)
acc = 0.9992

高准确度表明,该神经网络能够以最小的误差识别出不可见信号的故障类型。因此,精度越高,网络越好。

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

confusionchart(Ytest,Ypred);

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

参考

[1] Rieth的,C. A.,B. D.阿姆泽尔,R.陈。,和B.马亚。“附加田纳西伊士曼过程模拟数据为异常检测评价”。哈佛Dataverse,2017年第1版。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个信号集。每个集合是单元格数组的一个元素。每个单元阵列表示一个模拟。

功能加工= helperPreprocess(MYDATA,限制)H =尺寸(MYDATA);加工= {};IND = 1:极限:H X = MYDATA(IND:(IND +(极限-1)),4:结束);加工= [处理;X'];结束结束

helperNormalize

辅助函数helperNormalize使用数据,均值和标准差数据标准化的。

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

另请参阅

|||

相关话题