主要内容

。

カスタム学習ループでの学習オプションの指定

ほとんどのタスクでは,関数trainingOptionsおよびtrainNetworkタスク(たとえば,カスタム学习率スケジュール制御アルゴリズムの详细を习できのの详细を制御ます。trainingOptionsに用词されてていない合书,dlnetwork.オブジェクトを使用して自分でカスタム学習ループを定義できます。dlnetwork.オブジェクトを使用すると,自動微分を使用して,層グラフとして指定したネットワークに学習させることができます。

trainingOptionsとと同じオプションを指定するに,次次の例を指针として使用しし。

ソルバーオプション

ソルバーを指定するには,学習ループの更新ステップに関数adamupdate.rmspropupdate.,およびsgdmupdateをを用します。独自のカスタムソルバーを装配するには,关联dlupdateをを用して学习可以能能なをををしししししししししししし

適応モーメント推定(亚当)

ADAMをを用ししネットワークパラメーターををパラメーター更新闻adamupdate.をするする力量引をて,勾配の减衰を勾配のの减衰减衰をしし指定しししししするする入入てててて入入减衰减衰のの减衰ののののののののの

平方根平均二乗伝播(RMSProp)

rmspropをを用してネットワークパラメーターを更更パラメーターは更には,关键rmspropupdate.を使用します。対応する入力引数を使用して,分母のオフセット(イプシロン)の値を指定します。

モーメンタム项付き确率的勾配下法(SGDM)

SGDMを使用してネットワークパラメーターを更更ネットワークは更には,关联sgdmupdateを使用します。対応する入力引数を使用して,モーメンタム項を指定します。

学习

学习率を指定指定するには,关联adamupdate.rmspropupdate.,およびsgdmupdateの学習率入力引数を使用します。

学習率の調整,またはカスタム学習率スケジュールの使用を簡単に行うには,カスタム学習ループの前に初期学習率を設定します。

learnRate = 0.01;

区分的な学习率スケジュール

区区な习习スケジュール使使使して习习习习习习に率率をを自动的にには,指定された间隔のに习率を定の后习习を定。

区分的な学习率をを简体に指定するに,変学习learnRateSchedule学习ropfactor.,および学习ropperiod.を作物成し。ここここ,学习はは期学习率であり,learnRateSceduleには“分段”または“没有”が含まれ,学习ropfactor.は学习率率のの低のの系をするするする范囲[0,1]ののであり,学习ropperiod.は学习率を低させる间隔の数を指定正のの数。

learnRate = 0.01;learnRateSchedule =“分段”learnRateDropPeriod = 10;learnRateDropFactor = 0.1;

learnRateScheduleオプションが“分段”で现出者数码学习ropperiod.の驰数量,学校ループ内で,各各エポックの最后にに习率をげげ。新闻学院习を,学习习と学习。习低低低しししますししし

如果shownrateschedule ==.“分段”&& mod(epoch,learnRateDropPeriod) == 0 learnRate = learnRate *结束

プロット

学习时尚学校损失と学习精选をプロットはは,モデル勾配关键で,ミニバッチの损失と精密または平方英均二乘误差(RMSE)ののいずれか计算,アニメーションアニメーション线を使计算しこれらこれらプロットます。

“培训 - 进展”または“没有”のいずれかを含む数绘图を作物成し。検证検证メトリクスもプロットするには,検証の説明と同じオプションvalidationDataおよびvalidationFrequencyを使用します。

情节=“培训 - 进展”;ValidationData = {xValidation,YValidation};validationFrequency = 50;

学习前前,关节动画线をを使してアニメーションアニメーション线ををタスクします。分享到杂志,学校精灵と习损失のプロットをしますまた,検证データ指定されいるいるにに検证メトリクスているには検证のアニメーションをにます。

如果情节= =“培训 - 进展”图形子图(2,1,1)LineAccuralyTrain =动画线;ylabel(“准确性”) subplot(2,1,2) lineLossTrain = animatedline;包含(“迭代”) ylabel (“损失”如果〜isempty(validationdata)子图(2,1,1)LineacCuracyValidation = AnimatedLine;子图(2,1,2)LinelossValidation = AnimatedLine;结束结束

回帰タスクタスク综合性,中数名とと数ラベルをすることによってコードをし,学校精灵と度度し习习ととrmseのプロットとされるししさししますますますますますますますますますますますますますますしし

学习ループ内で,反复反复の最后にプロットを更ししてネットワークに适したメトリクスが含まれるようにししメトリクスがの场场场れるますしのの场场ととミニのに対応する点をををを追ますに対応するする点をををますますますます対応空ではなく,现处于の反复が1,または検证频度オプションのののいずれのの合,検证データの点ももしし。

如果情节= =“培训 - 进展”addpoints (lineAccuracyTrain迭代,accuracyTrain) addpoints (lineLossTrain,迭代,lossTrain)如果〜isempty(validationdata)&&(迭代== 1 || mod(referation,vighationfrequency)== 0)addpoopts(LineaccuracyValidation,迭代,准确验证)addpoopts(Linelossvalidation,迭代,refordValidation)结束结束
ここで,精确浮躁およびlossTrainは,モデル勾配关键でされたの度としますますますますますますますますますます。

ヒント

関数addpoints.では,データ点の型が双倍的であることが必要です。dlarrayオブジェクトから数码データを抽出するには,关联提取数据を使用しし.gpuからデータを收集するは,关联收集を使用します。

検証メトリクスを計算する方法については,検証を参照してください。

詳細出力

学習時に学習損失と学習精度を詳細テーブルに表示するには,モデル勾配関数で,ミニバッチの損失と精度(分類タスクの場合)またはRMSE(回帰タスクの場合)のいずれかを計算し,関数dispをを用して表示します。

詳細テーブルをオンにするかオフにするかを簡単に指定するには,変数详细的およびverboseFrequencyを作物成し。ここここ,详细的真正的またはになり,verbosefrequencyはは详细力间间のの反复を指定します。検证メトリクスを表示するには,検証の説明と同じオプションvalidationDataおよびvalidationFrequencyを使用します。

verbose = true verbosefrequency = 50;ValidationData = {xValidation,YValidation};validationFrequency = 50;

学習前に,詳細出力テーブルの見出しを表示し,関数抽搐をを使ししタイマーををますます。

DISP(“| ====================================================================================================================== |“) disp ("| Epoch | Iteration | Time Elapsed | Mini-batch | Validation | Mini-batch | Validation | Base Learning |") disp (“| | | |(HH:MM:SS)|精度|精度|损失|损失|”速度|“) disp (“| ====================================================================================================================== |“)开始= tic;

回帰タスクの場合,コードを調整し,学習精度と検証精度ではなく学習RMSEと検証RMSEが表示されるようにします。

详细的オプションが真正的で,それが最初の反復であるか,または反復回数がverboseFrequencyの倍数である場合,学習ループ内で,反復の最後に詳細出力を出力します。

如果详细&&(迭代== 1 || mod(迭代,verbosefryquency)== 0 d =持续时间(0,0,toc(start),'格式''hh:mm:ss');如果isempty(validationData) || mod(iteration,validationFrequency) ~= 0 accuracyValidation =”“;loceValidation =.”“结束DISP(“|”+......垫(时代7“左”)+“|”+......垫(迭代,11,“左”)+“|”+......垫(D, 14日“左”)+“|”+......垫(accuracyTrain 12“左”)+“|”+......垫(accuracyValidation 12“左”)+“|”+......垫(lossTrain 12“左”)+“|”+......垫(lossValidation 12“左”)+“|”+......垫(学习,15,“左”)+“|”结束

回帰タスクの場合,コードを調整し,学習精度と検証精度ではなく学習RMSEと検証RMSEが表示されるようにします。

学士学位,详细详细テーブルの最后の罫ををを出出罫をを出

DISP(“| ====================================================================================================================== |“

検証メトリクスを計算する方法については,検証を参照してください。

ミニバッチのサイズ

ミニバッチのサイズの設定は,データの形式や使用するデータストアのタイプによって異なります。

ミニバッチのサイズを简単に指定には,幂数miniBatchSizeを作成します。

miniBatchSize = 128;

イメージデータストア内のデータの場合,データストアの阅读プロパティプロパティをミニバッチバッチのに设定しし

洛桑国际管理发展学院。ReadSize = miniBatchSize;

拡張イメージデータストア内のデータの場合,学習前に,データストアのMiniBatchSizeプロパティプロパティをミニバッチバッチのに设定しし

Augimds.minibatchsize =小匹匹匹匹配;

メモリ内のデータの場合,学習中の各反復の開始時に,配列から観測値を直接読み取ります。

IDX =((迭代 -  1)*小匹atchsize + 1):(迭代*小匹匹配);x = XTrain(::::,IDX);

エポック数

学习ループの外侧のループで学習を行う最大エポック数を指定します。

最大エポック数号简体に指定するには,最大エポック数号含む数Maxepochs.を作成します。

maxepochs = 30;

学习ループの外侧のループループ,范囲1,2,...,Maxepochs.をループするように指定します。

epoch = 1:maxepochs......结束

検証

学习时にネットワークをするは,ホールドアウトされたセットをておき,そのデータに対するネットワークパフォーマンスをします。

検証オプションを簡単に指定するには,変数validationDataおよびvalidationFrequencyを作物成し。ここここ,validationDataには検证データがが含まれるであり,validationFrequencyはネットワークの検証間の反復回数を指定します。

validationData = {XValidation, YValidation};validationFrequency = 50;

学習ループ中,ネットワークパラメーターを更新した後に,関数预测を使た検证でさパフォーマンスをテストしますおりデータがされて,それが最初のであるか,それが最初反复である,または在のvalidationFrequencyオプションオプション分数である料,ネットワークを検证します。

如果|| mod(iteration,validationFrequency) == 0 dlYPredValidation = predict(dlnet,dlXValidation);lossValidation = crossentropy(softmax(dlYPredValidation), YValidation);[~, idx] = max (dlYPredValidation);labelsPredValidation =一会(idx);accuracyValidation = mean(labelsPredValidation == labelsValidation);结束
ここで,yvalidation.一会のラベルに対応するダミーダミーです。精密を计算するは,yvalidation.ををラベルの配列配列に変换しし

回帰タスクの場合,コードを調整し,検証精度ではなく検証RMSEが計算されるようにします。

早期停止

ホールドアウトさされた検证の损失が减少しなくなっときに习习をにに停止するにはは停止习をに脱出するを习ループを脱出するフラグ使习ループをするする

検証の許容回数(ネットワークの学習が停止するまでに,検証損失が以前の最小損失以上になることが許容される回数)を簡単に指定するには,変数validationPatienceを作成します。

验证障碍= 5;

学習前に,変数早期およびvalidationLossesをを化し。ここここ,早期は学習を早期に停止するフラグで,validationLossesには比较する损失が含まれます。でで早停止フラグフラグををし,INF.でで検证损失の配列ををしし。

earlyStop = false;如果Isfinite(验证景点)验证= inf(1,验证景点);结束

学習ループ内のミニバッチに対するループで,ループ条件に早期フラグを追加します。

Hasdata(DS)&&〜SepertStop......结束

検证ステップ中に,配列validationLossesに新しい検証を追加します。配列の最初の要素が最小である場合,早期フラグを真正的ににします。そうでないそうでない合,最初の要素を削除ます。

如果iSfinite(validationpatience)validationlosses = [验证validationloss];如果min(validationlosses)== validationlosses(1)seperstop = true;其他的ValidationLosses(1)= [];结束结束

l2正源化

重みにL2正則化を適用するには,関数dlupdateを使用します。

l2正則化係数を簡単に指定するには,L2正則化係数が含まれる変数l2Regularizationを作成します。

l2Regularization = 0.0001;

学习中,モデルモデル勾配を计算した后,各重み各重みパラメーター,关联dlupdateを使用してL2正則化係数と重みの積を勾配の計算値に追加します。重みパラメーターのみを更新するには,“重量”という名前のパラメーターを抽出します。

idx = dlnet.learnables.parameter ==“重量”;渐变(idx,:) = dlupdate(@(g,w)g + l2regularization * w,渐变(idx,:),dlnet.learnables(idx,:));

l2正源化パラメーターをに追追しし后,ネットワークパラメーターを更新闻。

勾配クリップ

勾配勾配をクリップするに,关节dlupdateを使用します。

勾配クリップオプションを简単に指定には,幂数GradientThresholdmethod.および毕业生察列人を作物成し。ここここ,GradientThresholdmethod.には“Global-l2norm”“l2norm”,または“绝对值”が含まれ,毕业生察列人はしきい値またはINF.が含まれる正のスカラーです。

渐变察勒尔德Method =“Global-l2norm”;梯度察勒尔德= 2;

thresholdGlobalL2Normthresholdl2norm.,およびthresholdabsolutevalue.という名前の関数を作成します。これらはそれぞれ“Global-l2norm”“l2norm”,および“绝对值”しきい値法を適用します。

“Global-l2norm”オプションオプション综合,この关节はモデルのすべて勾配作用

函数gradient = thresholdGlobalL2Norm(gradient,gradientThreshold) globalL2Norm = 0;i = 1:numel(梯度)globall2norm = globall2norm + sum(梯度{i}(:)。^ 2);结束globalL2Norm =√globalL2Norm);如果globalL2Norm > gradientThreshold normScale = gradientThreshold / globalL2Norm;i = 1:numel(gradient) gradient {i} = gradient {i} * normScale;结束结束结束

“l2norm”および“绝对值”オプションオプション综合,この关节は各勾配に対して作用

函数梯度=阈值(梯度,梯度察勒尔德)gradientnorm = Sqrt(Sum(梯度(:)。^ 2));如果gradientNorm > gradientThreshold gradient = gradient * (gradientThreshold / gradientNorm);结束结束
函数梯度=阈值babsolutevalue(梯度,梯度察勒尔德)梯度(梯度>梯度察勒尔德)=梯度察勒尔德;梯度(梯度<-GRadientThreshold)= -GRadientThreshold;结束

学习中,モデルモデル勾配をを计算し后后后后に后dlupdateを使用して適切な勾配クリップ法を勾配に適用します。“Global-l2norm”オプションオプションにはすべてすべてのモデル勾配が必要である,关词thresholdGlobalL2Normを勾配に直接適用します。“l2norm”および“绝对值”オプションオプション结合,关节dlupdateをを用して勾配を个别更更新します。

转变GradientThresholdmethod.案件“Global-l2norm”梯度=阈值Globall2norm(梯度,梯度察勒尔德);案件“l2norm”梯度= DLUPDATE(@(g)阈值(g,gradientthreshold),梯度);案件“绝对值”渐变= dlupdate(@(g)阈值baverabsolutevalue(g,gradientthreshold),梯度);结束

勾配しきい値演算を適用した後,ネットワークパラメーターを更新します。

単一のCPUまたはGPUでの学習

既定では,ソフトウェアはcpuのみを使して计算実しします。単一のgpuで学正文を行には,データをGPUArray.オブジェクトに変換します。GPUをを使使するは,并行计算工具箱™および计算能力3.0以上のcuda®対応英伟达®GPUが必要です。

実行环境を简に指定するには,“cpu”“GPU”,または“汽车”ののいずれかがが含まれるれるexecultenvironment.を作成します。

executionEnvironment =“汽车”

学科中,ミニバッチを読み取った后に行环境オプション确认し,必要に応じてデータをGPUArray.关にします。关节canUseGPUは使用可能なGPUを確認します。

如果(execultenvironment ==.“汽车”&& canUseGPU) || executionEnvironment ==“GPU”DLX = GPUARRAY(DLX);结束

チェックポイント

学习中にチェックポイントネットワーク保存するするは,关联保存を使用してネットワークを保存します。

チェックポイントをオンにするかどうかを簡単に指定するには,チェックポイントネットワークのフォルダーが含まれる,または空の変数检查点路径を作成します。

checkpointpath = fullfile(tempdir,“检查点”);

チェックポイントフォルダーが现处于していない综合,学校前に,チェックポイントフォルダーを作用成し。

如果〜存在(CheckPointPath,“dir”)Mkdir(CheckPointPath)结束

学科中,各エポックの最后にネットワーク垫ファイルファイル保存できます..现在のの回できます。

如果〜isempty(checkpointpath)d = datestr(现在,'yyyy_mm_dd__hhh_mm_ss');filename =.“dlnet_checkpoint__”+迭代+“_”+ D +“。垫”;保存(文件名,“dlnet”结束
ここで,dlnetは保存されるdlnetwork.オブジェクトです。

参考

|||||||

関連するトピック