このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
深層学習ネットワクの学習時の出力のカスタマズ
この例では,深層学習ニューラルネットワークの学習中に各反復で実行される出力関数を定義する方法を説明します。trainingOptions
の名前と値のペアの引数“OutputFcn”
を使用して出力関数を指定する場合,trainNetwork
は,学習の開始前に1回,学習の各反復後,学習の終了後に1回,これらの関数を呼び出します。出力関数が呼び出されるたびに,trainNetwork
は,現在の反復回数,損失,精度などの情報を含む構造体を渡します出力関数を使用して,進行状況を表示またはプロットするか,学習を停止できます。学習を早期に停止するには,出力関数が真正的
を返すようにします。いずれかの出力関数から真正的
が返されると,学習が終了し,trainNetwork
から最新のネットワ,クが返されます。
検証セットに対する損失が減少しなくなった場合に学習を停止するには,trainingOptions
の名前と値のペアの引数“ValidationData”
および“ValidationPatience”
を使用して,検証デ,タと検証の許容回数をそれぞれ指定します。検証の許容回数は,ネットワークの学習が停止するまでに,検証セットに対する損失が前の最小損失以上になることが許容される回数です。出力関数を使用して他の停止条件を追加できます。この例では,検証データに対する分類精度が改善されなくなった場合に学習を停止する出力関数を作成する方法を示します。出力関数の定義は,このスクリプトの終わりで行います。
5000個の数字のメジが格納されている学習デタを読み込みます。ネットワクの検証用に1000個のメジを残しておきます。
[XTrain,YTrain] = digitTrain4DArrayData;idx = randperm(size(XTrain,4),1000);XValidation = XTrain(:,:,:,idx);XTrain(:,:,:,idx) = [];YValidation = YTrain(idx);YTrain(idx) = [];
数字のメジデタを分類するネットワクを構築します。
图层= [imageInputLayer([28 28 1])卷积2dlayer (3,8,“填充”,“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”,“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”,“相同”batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
ネットワ,ク学習のオプションを指定します。学習中に一定の間隔でネットワ,クを検証するための検証デ,タを指定します。エポックごとに1回ネットワ,クが検証されるように,“ValidationFrequency”
の値を選択します。
検証セットに対する分類精度が改善されなくなった場合に学習を停止するために,出力関数としてstopIfAccuracyNotImproving
を指定します。stopIfAccuracyNotImproving
の2番目の入力引数は,ネットワークの学習が停止するまでに,検証セットに対する精度が前の最大精度以下になることが許容される回数です。学習を行うエポックの最大回数に,任意の大きな値を選択します。学習は自動的に停止するため,学習は最終エポックに達しません。
miniBatchSize = 128;validationFrequency = floor(编号(YTrain)/miniBatchSize);选项= trainingOptions(“个”,...“InitialLearnRate”, 0.01,...“MaxEpochs”, 100,...“MiniBatchSize”miniBatchSize,...“VerboseFrequency”validationFrequency,...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”validationFrequency,...“阴谋”,“训练进步”,...“OutputFcn”@(信息)stopIfAccuracyNotImproving(信息,3));
ネットワ,クに学習をさせます。検証精度が向上しなくなると,学習は停止します。
net = trainNetwork(XTrain,YTrain,图层,选项);
单CPU训练。初始化输入数据规范化。|======================================================================================================================| | 时代| |迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习 | | | | ( hh: mm: ss) | | | | |损失损失精度精度 | |======================================================================================================================| | 1 | 1 | 00:00:07 | | 7.81% 12.70% | 2.7155 | 2.5169 | 0.0100 | | 1 | | 31日00:00:19 |71.88% | 74.70% | 0.8805 | 0.8133 | 0.0100 | | 62 | | 00:00:28 | | 87.50% 87.80% | 0.3898 | 0.4461 | 0.0100 | | 3 | 93 | 00:00:38 | | 95.31% 94.20% | 0.2206 | 0.2543 | 0.0100 | | 124 | | 00:00:52 | | 96.09% 96.80% | 0.1448 | 0.1757 | 0.0100 | | 155 | | 00:01:03 | | 99.22% 97.60% | 0.0989 | 0.1304 | 0.0100 | | 6 | 186 | 00:01:11 | | 99.22% 98.00% | 0.0789 | 0.1126 | 0.0100 | | 217 | | 00:01:18 | | 99.22% 98.00% | 0.0559 | 0.0945 | 0.0100 | | 248 | | 00:01:25 | | 97.90% | 0.0431 100.00%| 0.0869 | 0.0100 | | 279 | | 00:01:35 | | 100.00% 98.10% | 0.0343 | 0.0785 | 0.0100 | | 310 | | 00:01:45 | | 100.00% 98.50% | 0.0271 | 0.0679 | 0.0100 | | 341 | | 00:01:52 | | 100.00% 98.50% | 0.0239 | 0.0620 | 0.0100 | | 372 | | 00:01:59 | | 100.00% 98.70% | 0.0216 | 0.0572 | 0.0100 | | 403 | | 00:02:07 | | 100.00% 98.70% | 0.0188 | 0.0535 | 0.0100 | | 434 | | 00:02:16 | | 100.00% 98.90% | 0.0165 | 0.0508 | 0.0100 | | 465 | | 00:02:28 | | 100.00% 99.00% | 0.0145 | 0.0482 |0.0100 | | 16 | 496 | 00:02:36 | | 100.00% 99.00% | 0.0127 | 0.0459 | 0.0100 | | 527 | | 00:02:45 | | 100.00% 99.00% | 0.0113 | 0.0439 | 0.0100 | | 558 | | 00:02:56 100.00% | | | 0.0102 | 0.0421 | 0.0100 99.00% | |======================================================================================================================| 培训完成:OutputFcn拦住了。
出力関数の定義
連続N
回のネットワーク検証で検証データに対する最良分類精度が改善されなかった場合,ネットワークの学習を停止する出力関数stopIfAccuracyNotImproving(信息,N)
を定義します。この条件は,検証損失を使用する組み込み停止条件と似ていますが,ここでは損失ではなく分類精度に適用されます。
函数stop = stopifaccuracynotimprove (info,N) stop = false;跟踪最佳验证精度及其验证次数。%准确度并没有提高。持续的bestValAccuracy持续的valLag培训开始时清除变量。%如果信息。状态= =“开始”bestValAccuracy = 0;valLag = 0;elseif~ isempty (info.ValidationLoss)%将当前验证精度与目前最佳精度进行比较,%%,或将最佳精度设置为当前精度,或增加%未得到改善的验证次数。如果信息。ValidationAccuracy > bestValAccuracy valLag = 0;bestValAccuracy = info.ValidationAccuracy;其他的valLag = valLag + 1;结束%如果验证延迟至少为N,即验证精度%在至少N次验证中没有改善,则返回true和停止训练。如果valLag >= N stop = true;结束结束结束