。
ほとんどのタスクでは,関数trainingOptions
およびtrainNetwork
タスク(たとえば,カスタム学习率スケジュール制御アルゴリズムの详细を习できのの详细を制御ます。trainingOptions
に用词されてていない合书,dlnetwork.
オブジェクトを使用して自分でカスタム学習ループを定義できます。dlnetwork.
オブジェクトを使用すると,自動微分を使用して,層グラフとして指定したネットワークに学習させることができます。
trainingOptions
とと同じオプションを指定するに,次次の例を指针として使用しし。
学習オプション | trainingOptions の引数 |
例 |
---|---|---|
亚当ソルバー | 適応モーメント推定(亚当) | |
RMSPropソルバー | 平方根平均二乗伝播(RMSProp) | |
个ソルバー | モーメンタム项付き确率的勾配下法(SGDM) | |
学习 | “InitialLearnRate” |
学习 |
学習率スケジュール | 区分的な学习率スケジュール | |
学习の进行状况 | “阴谋” |
プロット |
詳細出力 | 詳細出力 | |
ミニバッチのサイズ | 'minibatchsize' |
ミニバッチのサイズ |
エポック数 | 'maxepochs' |
エポック数 |
検証 | 検証 | |
l2正源化 | 'L2Regularization' |
L2正則化 |
勾配クリップ | 勾配クリップ | |
単一のCPUまたはGPUでの学習 | “ExecutionEnvironment” |
単一のCPUまたはGPUでの学習 |
チェックポイント | “CheckpointPath” |
チェックポイント |
ソルバーを指定するには,学習ループの更新ステップに関数adamupdate.
、rmspropupdate.
,およびsgdmupdate
をを用します。独自のカスタムソルバーを装配するには,关联dlupdate
をを用して学习可以能能なをををしししししししししししし
ADAMをを用ししネットワークパラメーターををパラメーター更新闻adamupdate.
をするする力量引をて,勾配の减衰を勾配のの减衰减衰をしし指定しししししするする入入てててて入入减衰减衰のの减衰ののののののののの
rmspropをを用してネットワークパラメーターを更更パラメーターは更には,关键rmspropupdate.
を使用します。対応する入力引数を使用して,分母のオフセット(イプシロン)の値を指定します。
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正則化を適用するには,関数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;
thresholdGlobalL2Norm
、thresholdl2norm.
,および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で学正文を行には,データを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.
オブジェクトです。
adamupdate.
|dlarray
|dlfeval.
|dlgradient
|dlnetwork.
|dlupdate
|rmspropupdate.
|sgdmupdate