主要内容

具有数字特征的列车网络

这个例子展示了如何创建和训练一个简单的神经网络,用于深度学习特征数据分类。

如果你有一个数字特征的数据集(例如,一个没有空间或时间维度的数字数据集合),那么你可以使用特征输入层训练深度学习网络。有关如何训练网络进行图像分类的示例,请参见创建简单的深度学习网络分类

这个例子展示了如何训练一个网络来对给定的数字传感器读数、统计数据和分类标签的混合传动系统的齿轮齿状态进行分类。

加载数据

加载变速箱外壳数据集进行培训。该数据集由传输系统的208个综合读数组成,其中包括18个数字读数和三个分类标签:

  1. SigMean-振动信号均值

  2. SigMedian-振动信号中位数

  3. SigRMS-振动信号RMS

  4. SigVar-振动信号方差

  5. SigPeak-振动信号峰值

  6. SigPeak2Peak-振动信号峰对峰

  7. SigSkewness—振动信号偏度

  8. SigKurtosis-振动信号峰度

  9. SigCrestFactor-振动信号波峰因子

  10. SigMAD-振动信号MAD

  11. SigRangeCumSum-振动信号范围累计和

  12. SigCorrDimension-振动信号相关维数

  13. SigApproxEntropy-振动信号近似熵

  14. SigLyapExponent-振动信号Lyap指数

  15. PeakFreq-峰值频率。

  16. HighFreqPower-高频功率

  17. EnvPower-环境动力

  18. PeakSpecKurtosis-谱峰度的峰值频率

  19. SensorCondition-传感器的状态,指定为“传感器漂移”或“传感器无漂移”

  20. ShaftCondition-轴的状况,指定为“轴磨损”或“轴无磨损”

  21. GearToothCondition-齿轮齿的状态,指定为“齿故障”或“无齿故障”

从CSV文件中读取传输套管数据“transmissionCasingData.csv”

文件名=“transmissionCasingData.csv”;TBL =可读(文件名,“TextType”“字符串”);

属性将预测标签转换为分类标签convertvars函数。

labelName =“GearToothCondition”;tbl = convertvars(tbl,labelName,“分类”);

查看表的前几行。

头(台)
ans =8×21表SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis SensorCondition ShaftCondition GearToothCondition  ________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________ ________________ ______________________________ __________________ -0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13“传感器漂移”“无轴磨损”无齿故障-0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12“传感器漂移”“无轴磨损”无齿故障1.0502 1.0267 1.4449 0.98491 2.814 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.190 6.74e-06 2.85e-07 162.13“传感器漂移”“轴磨损”无齿故障1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 1.2483 1.9707 0.81324 30984 1.14202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 0 3.62e-06 2.28e-07 230.39“传感器漂移”“轴磨损”无齿故障1.0275 1.0102 1.4338 -0.02659 1.9638 0.81589 31102 1.09850.033427 64.576 0 2.55e-06 1.65e-07 230.39 "Sensor Drift" "Shaft Wear" No Tooth Fault 1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 "Sensor Drift" "Shaft Wear" No Tooth Fault 1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 "Sensor Drift" "Shaft Wear" No Tooth Fault

要使用分类特征训练网络,首先必须将分类特征转换为数字。方法将类别预测符转换为类别预测符convertvars通过指定包含所有类别输入变量名称的字符串数组来实现。在这个数据集中,有两个带有名称的分类特征“SensorCondition”而且“ShaftCondition”

categoricalInputNames = [“SensorCondition”“ShaftCondition”];tbl = convertvars(tbl,categoricalInputNames,“分类”);

遍历分类输入变量。对于每个变量:

  • 类将类别值转换为单热编码向量onehotencode函数。

  • 函数将单热向量添加到表中addvars函数。指定将向量插入到包含相应类别数据的列之后。

  • 删除包含类别数据的相应列。

i = 1:numel(categoricalInputNames) name = categoricalInputNames(i);Oh = onehotencode(tbl(:,name));TBL = addvars(TBL,哦,“后”、名称);Tbl (:,name) = [];结束

方法将向量拆分为单独的列splitvars函数。

TBL =分裂(TBL);

查看表的前几行。请注意,类别预测符已被分割为多个列,其中类别值作为变量名。

头(台)
ans =表8×23SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis没有传感器漂移传感器漂移没有轴穿轴穿GearToothCondition  ________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________________________ _______________ ____________ _____________ __________ __________________ -0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 01 10无齿故障-0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 01 10无齿故障1.0502 1.0267 1.4449 0.98491 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.14790.031565 - 125.19 6.74 2.85 e-06 e-07 162.13 0 1 0 1没有牙齿错1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 4.99 e-06 2.4 e-07 162.13 0 1 0 1没有牙齿错1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 3.62 e-06 2.28 e-07 230.39 0 1 0 1没有牙齿错1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 1.65 0.81589 1.0985 0.033427 64.576 31102 0 2.55 e-06 e-07 230.3901 01牙号故障1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 01 01牙号故障1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 01 011牙号故障

查看数据集的类名。

classNames =类别(tbl{:,labelName})
一会=2 x1细胞{“没有牙齿故障”}{“牙齿故障”}

将数据集分成训练集和验证集

将数据集划分为训练、验证和测试分区。留出15%的数据用于验证,15%用于测试。

查看数据集中观测数据的数量。

numObservations = size(tbl,1)
numObservations = 208

确定每个分区的观察数。

numObservationsTrain = floor(0.7*numObservations)
numObservationsTrain = 145
numObservationsValidation = floor(0.15*numObservations)
numObservationsValidation = 31
numObservationsTest = numObservations - numObservationsTrain - numObservationsValidation
numObservationsTest = 32

创建一个与观察结果对应的随机索引数组,并使用分区大小对其进行分区。

idx = randperm(numObservations);idxTrain = idx(1:numObservationsTrain);idxValidation = idx(numObservationsTrain+1:numObservationsTrain+numObservationsValidation);idxTest = idx(numObservationsTrain+numObservationsValidation+1:end);

使用索引将数据表划分为训练、验证和测试分区。

tblTrain = tbl(idxTrain,:);tblValidation = tbl(idxValidation,:);tblTest = tbl(idxTest,:);

定义网络架构

定义网络进行分类。

定义一个带有特征输入层的网络,并指定特征的数量。此外,配置输入层以使用Z-score规范化对数据进行规范化。接下来,包括一个输出大小为50的全连接层,然后是一个批处理规范化层和一个ReLU层。对于分类,指定另一个全连接层,其输出大小对应于类的数量,然后是softmax层和classification层。

numFeatures = size(tbl,2) - 1;numClasses = numel(classNames);layers = [featureInputLayer(numFeatures,“归一化”“zscore”) fullyConnectedLayer(50) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

指定培训项目

指定培训选项。

  • 使用Adam训练网络。

  • 使用16号的小批量训练。

  • 对每个纪元的数据进行洗牌。

  • 在培训过程中通过指定验证数据监控网络的准确性。

  • 以图形形式显示训练进度,并抑制详细命令窗口输出。

该软件在训练数据上训练网络,并在训练期间定期计算验证数据的准确性。验证数据不用于更新网络权重。

miniBatchSize = 16;选项= trainingOptions(“亚当”...“MiniBatchSize”miniBatchSize,...“洗牌”“every-epoch”...“ValidationData”tblValidation,...“阴谋”“训练进步”...“详细”、假);

列车网络的

使用定义的体系结构训练网络、训练数据和训练选项。默认情况下,trainNetwork如果有GPU,则使用GPU,否则使用CPU。在GPU上进行训练需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱).属性指定执行环境“ExecutionEnvironment”的名称-值对参数trainingOptions

训练进度图显示了小批损失和准确性以及验证损失和准确性。有关训练进度图的更多信息,请参见监控深度学习训练进度

net = trainNetwork(tblTrain,labelName,layers,options);

图训练进度(26-Feb-2022 11:02:05)包含2个axis对象和另一个类型为uigridlayout的对象。坐标轴对象1包含10个类型为patch、text、line的对象。坐标轴对象2包含10个类型为patch、text、line的对象。

测试网络

利用训练好的网络预测测试数据的标签,并计算准确率。指定用于训练的相同的小批大小。

YPred = category (net,tblTest(:,1:end-1),“MiniBatchSize”, miniBatchSize);

计算分类精度。准确率是指网络正确预测的标签的比例。

YTest = tblTest{:,labelName};精度= sum(YPred == YTest)/numel(YTest)
准确度= 0.9688

在混淆矩阵中查看结果。

YPred图confusionchart(欧美)

图包含一个confusimatrixchart类型的对象。

另请参阅

||||

相关的例子

更多关于