主要内容

このページの翻訳は最新ではありませ。

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

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

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

ソルバーオプション

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

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

ADAMをを用してネットワークパラメーターをを新闻adamupdateをするする力量引て,て,勾配の率ます勾配二乘の减衰を指定指定してて减衰。

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

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

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

sgdmを使用してネットワークパラメーターを更更ネットワークは更には,关键sgdmupdateををする力量引をてて,モーメンタム项を指定ます。

学习

学習率を指定するには,関数adamupdatermspropupdate.,およびsgdmupdateの学習率入力引数を使用します。

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

learnRate = 0.01;

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

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

区分的な学习率スケジュール単简体学习learnRateSchedulelearnRateDropFactor,および学习研讨会を作物しし。ここここ,学习は初期学習率であり,learnRateSceduleには“分段”または“没有”が含まれ,learnRateDropFactorは学习率のの下ののををする范囲范囲[0,1]のスカラーであり,学习研讨会[

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

learnRateScheduleオプションが“分段”で现出者数码学习研讨会ののであるである,学习ループ内で,各エポックの最后に习率率习ます。新闻学院习を,学校习と学习。

如果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) subplot(2,1,1) lineAccuracyValidation = animatedline;subplot(2,1,2) lineLossValidation = animatedline;结束结束

回帰回帰の综合性,中数名称ととラベルをすることによってをを调整,学校精密と検证精密ではなく习习と検证rmseのプロットがが

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

如果情节= =“培训 - 进展”addpoints (lineAccuracyTrain迭代,accuracyTrain) addpoints (lineLossTrain,迭代,lossTrain)如果〜isempty(validationdata)&&(迭代== 1 || mod(referation,validation罚批)== 0)addpoopts(LineaccuracyValidation,迭代,准确验证)addpoopts(Linelossvalidation,迭代,rectionValidation)结束结束
ここで,精确浮躁および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) | Accuracy | Accuracy | Loss | Loss | Rate |") disp (“| ====================================================================================================================== |“)开始= TIC;

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

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

如果详细&&(迭代== 1 || mod(迭代,verbosefrequency)== 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“左”)+“|”+......垫(learnRate 15“左”)+“|”结束

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

学習の終了時に,詳細テーブルの最後の罫線を出力します。

disp (“| ====================================================================================================================== |“

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

ミニバッチのサイズ

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

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

miniBatchSize = 128;

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

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

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

augimds。MiniBatchSize = MiniBatchSize;

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

idx =((迭代- 1)*miniBatchSize + 1):(迭代*miniBatchSize);X = XTrain (:,:,:, idx);

エポック数

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

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

maxepochs = 30;

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

时代= 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には比较する损失が含まれます。でで期停止フラグフラグをををし,で検証損失の配列を初期化します。

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

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

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

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

如果isfinite(validationPatience) validationLosses = [validationLosses validationLoss];如果min(validationLosses) == validationLosses(1)其他的验证栏(1)= [];结束结束

l2正式化

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

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

l2Regularization = 0.0001;

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

idx = dlnet.learnables.parameter ==“重量”;gradient (idx,:) = dlupdate(@(g,w) g + l2Regularization*w, gradient (idx,:), dlnet.Learnables(idx,:)));

l2正源化パラメーターをに追加した,ネットワークパラメーターを更新します。

勾配クリップ

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

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

梯度察勒尔德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”および“绝对值”[

函数gradient = thresholdL2Norm(gradient,gradientThreshold) gradientNorm = sqrt(sum(gradients(:).^2));如果gradientNorm > gradientThreshold gradient = gradient * (gradientThreshold / gradientNorm);结束结束
函数梯度=阈值babsolutevalue(梯度,梯度阈值)梯度(梯度>梯度察勒尔德)=梯度察勒尔德;梯度(梯度<-GRadientThreshold)= -GRadientThreshold;结束

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

转变gradientThresholdMethod情况下“global-l2norm”gradient = thresholdGlobalL2Norm(gradient, gradientThreshold);情况下“l2norm”梯度= dlupdate(@(g)阈值图(g,gradientthreshold),梯度);情况下“绝对值”渐变= dlupdate(@(g)阈值babsolutevalue(g,gradientthreshold),梯度);结束

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

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

既定では,ソフトウェアはCPUのみを使用して計算を実行します。単一のGPUで学習を行うには,データをGPUARRAY.オブジェクトに変換します。GPUを使用するには并行计算工具箱™とサポートされているGPUデバイスが必要です。サポートされているデバイスについては,リリース別のGPUサポート(并行计算工具箱)を参照してください。

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

executionEnvironment =“汽车”

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

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

チェックポイント

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

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

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

チェックポイントフォルダーが现出,学校前に,チェックポイントフォルダーを作物成し。

如果~存在(checkpointPath“dir”)Mkdir(CheckPointPath)结束

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

如果~isempty(checkpointPath) D = datestr(now,“yyyy_mm_dd__HH_MM_SS”);filename =“dlnet_checkpoint__”+迭代+“_”+ D +“。垫”;保存(文件名,“dlnet”结束
ここで,dlnetは保存されるdlnetworkオブジェクトです。

参考

|||||||

関連するトピック