主要内容

具有数字功能的火车网络

This example shows how to create and train a simple neural network for deep learning feature data classification.

If you have a data set of numeric features (for example a collection of numeric data without spatial or time dimensions), then you can train a deep learning network using a feature input layer. For an example showing how to train a network for image classification, see创建简单的深度学习网work for Classification.

此示例显示了如何在数字传感器读取,统计和分类标签的混合物中训练网络以对传输系统的齿轮齿状况进行分类。

Load Data

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

  1. 西格曼- 振动信号平均值

  2. SigMedian- 振动信号中位数

  3. 西格姆斯- 振动信号RMS

  4. 西格瓦- 振动信号差异

  5. SigPeak- 振动信号峰

  6. sigpeak2peak- 振动信号峰到峰

  7. Sigskewness- 振动信号偏度

  8. SigKurtosis- 振动信号峰度

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

  10. 西格马德— Vibration signal MAD

  11. Sigrangecumsum- 振动信号范围累积总和

  12. sigcorrdimension- 振动信号相关维度

  13. sigapproxentropy— Vibration signal approximate entropy

  14. siglyapexponent- 振动信号LYAP指数

  15. 峰弗雷克— Peak frequency.

  16. HighFreqPower— High frequency power

  17. Envpower- 环境力量

  18. 峰值斑点— Peak frequency of spectral kurtosis

  19. 传感条件- 传感器的条件,指定为“传感器漂移”或“无传感器漂移”

  20. 轴条件— Condition of shaft, specified as "Shaft Wear" or "No Shaft Wear"

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

从CSV文件中读取传输外壳数据“传输casingdata.csv”.

文件名=“传输casingdata.csv”;tbl =可读取(文件名,'texttype','String');

将标签转换为预测的标签,使用convertvars功能。

labelName =“齿轮齿条”;tbl = convertvars(tbl,labelname,“分类”);

查看表的前几行。

头(TBL)
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 "Sensor Drift" "No Shaft Wear" No Tooth Fault -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 "Sensor Drift" "No Shaft Wear" No Tooth Fault 1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.19 0 6.74e-06 2.85e-07 162.13 "Sensor Drift" "Shaft Wear" No Tooth Fault 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 0 4.99e-06 2.4e-07 162.13 "Sensor Drift" "ShaftWear" No Tooth Fault 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 0 3.62e-06 2.28e-07 230.39 "Sensor Drift" "Shaft Wear" No Tooth Fault 1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.24391.9638 0.81589 31102 1.0985 0.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通过指定包含所有分类输入变量名称的字符串数组来函数。在此数据集中,有两个具有名称的分类功能“传感条件”“轴条件”.

categoricalInputNames = [“传感条件”“轴条件”];tbl = convertvars(tbl,cancoricalInputNames,“分类”);

Loop over the categorical input variables. For each variable:

  • 使用该分类值将分类值转换为单热编码向量onehotencode功能。

  • Add the one-hot vectors to the table using theaddvars功能。指定在包含相应的分类数据的列之后插入向量。

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

为了i = 1:numel(cancoricalInputNames)name = cancoricalInputNames(i);oh = oneHotEncode(tbl(:,name));tbl = addvars(tbl,哦,,'后',name); tbl(:,name) = [];结尾

使用该向量将向量分为单独的列splitvars功能。

tbl = splitvars(tbl);

查看表的前几行。Notice that the categorical predictors have been split into multiple columns with the categorical values as the variable names.

头(TBL)
ans =8×23桌西格曼SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis No Sensor Drift Sensor Drift No Shaft Wear Shaft Wear 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 1 1 0 No Tooth Fault -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 0 1 1 0 No Tooth Fault 1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.19 0 6.74e-06 2.85e-07 162.13 0 1 0 1 No Tooth Fault 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 0 4.99e-06 2.4e-07 162.13 0 1 0 1 No Tooth Fault 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 0 3.62e-06 2.28e-07 230.39 0 1 0 1 No Tooth Fault 1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 0.81589 31102 1.0985 0.033427 64.576 0 2.55e-06 1.65e-07 230.39 0 1 0 1 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 0 1 0 1 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 0 1 0 1 No Tooth Fault

查看数据集的类名。

classNames = categories(tbl {:,labelName})
classNames =2x1 cell{'No Tooth Fault'} {'Tooth Fault' }

Split Data Set into Training and Validation Sets

将数据设置分为培训,验证和测试分区。搁置15%的数据进行验证,15%用于测试。

View the number of observations in the dataset.

numObservations = size(tbl,1)
numObservations = 208

Determine the number of observations for each partition.

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);

Partition the table of data into training, validation, and testing partitions using the indices.

tbltrain = tbl(idxtrain,:);tblValidation = tbl(idxvalidation,:);tbltest = tbl(idxtest,:);

定义网络体系结构

定义网络进行分类。

定义具有功能输入层的网络并指定功能数量。另外,配置输入层以使用z得分归一化将数据归一化。接下来,包括一个完全连接的层,其输出尺寸50,然后是批处理归一层和一个relu层。对于分类,请指定另一个完全连接的图层,其输出大小对应于类的数量,然后是SoftMax层和分类层。

numFeatures = size(tbl,2)-1;numClasses = numel(classNames);layers = [featurenputlayer(numfeatures,'正常化','zscore')完整连接的layerer(50)batchnormalizationlayer relulayer plullconnectedlayer(numClasses)soft -maxlayer classificationlayer];

Specify Training Options

Specify the training options.

  • 使用亚当训练网络。

  • Train using mini-batches of size 16.

  • Shuffle the data every epoch.

  • 通过指定验证数据来监视培训期间的网络准确性。

  • 在图中显示训练进度并抑制详细的命令窗口输出。

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

minibatchsize = 16;选项=训练('亚当',...“ MINIBATCHSIZE”,minibatchsize,...“洗牌”,“每个段”,...'验证data',tblvalidation,...“阴谋”,'training-progress',...“冗长”,错误的);

Train Network

使用由定义的体系结构训练网络, the training data, and the training options. By default,火车网如果有可用的话,请使用GPU,否则使用CPU。在GPU上进行培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持设备的信息,请参阅万博1manbetx释放的G万博1manbetxPU支持(并行计算工具箱). You can also specify the execution environment by using the“执行环境”名称值对参数训练.

训练进度图显示了小批量损失,准确性以及验证损失和准确性。有关培训进度图的更多信息,请参阅Monitor Deep Learning Training Progress.

net = trainnetwork(tbltrain,labelname,Layers,options);

图训练进度(26-FEB-2022 11:02:05)包含2个轴对象和另一个类型Uigridlayout对象。轴对象1包含10个类型补丁,文本,行的对象。轴对象2包含10个类型补丁,文本,行的对象。

测试网络

Predict the labels of the test data using the trained network and calculate the accuracy. Specify the same mini-batch size used for training.

ypred =分类(net,tbltest(:,1:end-1),“ MINIBATCHSIZE”,minibatchSize);

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

YTest = tblTest{:,labelName}; accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9688

在混淆矩阵中查看结果。

Figusy ConfusionChart(Ytest,Ypred)

图包含类型混淆的对象。

也可以看看

||||

Related Examples

More About