主要内容

숫자형특징을사용하여신경망훈련시키기

이예제에서는딥러닝특징데이터분류용으로간단한신경망을만들고훈련시키는방법을보여줍니다。

숫자형특징으로구성된데이터세트(예:공간차원또는시간차원이없는숫자형데이터의모음)가있는경우,특징입력계층을사용하여딥러닝신경망을훈련시킬수있습니다。상분류를위해신경망을훈련시키는방법을보여주는예제는간단한분류용딥러닝신경망만들기항목을참조하십시오。

이예제에서는숫자형센서측정값,통계량및直言형레이블로구성된혼합데이터가주어졌다고가정할때변속기시스템의기어톱니상태를분류하도록신경망을훈련시키는방법을보여줍니다。

데이터불러오기

훈련을위한변속기케이싱데이터셋을불러옵니다。이데이터세트는18개의수치측정값과3개의直言형레이블로구성된변속기시스템의합성측정값208개가들어있습니다。

  1. SigMean-진동신호평균

  2. SigMedian-진동신호중앙값

  3. SigRMS-진동신호RMS

  4. SigVar-진동신호분산

  5. SigPeak-진동신호피크

  6. SigPeak2Peak-진동신호피크간차이

  7. SigSkewness-진동신호왜도

  8. SigKurtosis-진동신호첨도

  9. SigCrestFactor-진동신호파고율

  10. SigMAD-진동신호疯了

  11. SigRangeCumSum-진동신호범위누적합

  12. SigCorrDimension-진동신호상관차원

  13. SigApproxEntropy-진동신호근사엔트로피

  14. SigLyapExponent-진동신호랴푸노프지수

  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,“分类”);

테이블의처음몇개행을봅니다。

头(台)
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”범주형특징이2개있습니다。

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

테이블의처음몇개행을봅니다。범주형예측변수가이범주형값을변수이름으로갖는여러개의열로분할된것을볼수있습니다。

头(台)
SigMean 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 -점수정규화를사용하여데이터를정규화하도록입력계층을구성합니다。그런다음출력크기가인50완전연결계층을포함시키고그뒤에배치정규화계층과ReLU계층을포함시킵니다。분류용으로,클래스개수에대응하는출력크기를갖는또다른완전연결계층과그뒤에오는소프트맥스계층및분류계층을지정합니다。

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

훈련옵션지정하기

훈련옵션을지정합니다。

  • 亚当을사용하여신경망을훈련시킵니다。

  • 크기가16 rm미니배치를사용하여훈련시킵니다。

  • 매纪元마다데이터를섞습니다。

  • 검데이터를지정하여훈련중에신경망정확도를모니터링합니다。

  • 훈련진행상황을플롯에@ @시하고세부정보가명령창에출력되지않도록합니다。

훈련데이터에대해신경망이훈련되고,훈련중에규칙적인간격으로검증데이터에대한정확도가계산됩니다。검데이터는신경망가중치를업데이트하는데사용되지않습니다。

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

신경망훈련시키기

에의해정의된아키텍처,훈련데이터및훈련옵션을사용하여신경망을훈련시킵니다。기본적으로trainNetwork는GPU를사용할수있으면GPU를사용하고그렇지않은경우에는CPU를사용합니다。GPU에서훈련시키려면并行计算工具箱™와지원되는GPU장치가필요합니다。지원되는장치에대한자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。trainingOptions“ExecutionEnvironment”이름-값쌍通讯录수를사용하여실행환경을지정할수도있습니다。

훈련진행상황플롯에미니배치의손실및정확도와검증의손실및정확도가표시됩니다。훈련진행상황플롯에대한자세한내용은딥러닝훈련진행상황모니터링하기항목을참조하십시오。

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

{

신경망테스트하기

훈련된신경망을사용하여테스트데이터의레이블을예측하고정확도를계산합니다。훈련에사용된것과동일하게미니배치크기를지정합니다。

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

분류정확도를계산합니다。정확도는신경망이올바르게예측하는레이블의비율입니다。

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

결과를혼동행렬로@ @시합니다。

YPred图confusionchart(欧美)

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

참고 항목

||||

관련 예제

세부 정보