ほとんどのタスクでは,関数trainingOptions
およびtrainNetwork
タスク(たとえば,カスタム学习率スケジュール制御のの详细を制御できアルゴリズム详细详细制御できますになスケジュールスケジュールがますになオプションがががオプションオプションがが。trainingOptions
に用词されてていい合书,dlnetwork
オブジェクトを使用して自分でカスタム学習ループを定義できます。dlnetwork
オブジェクトを使用すると,自動微分を使用して,層グラフとして指定したネットワークに学習させることができます。
trainingOptions
と同じオプションを指定するは,次の例を指针として使。
学習オプション | trainingOptions の引数 |
例 |
---|---|---|
亚当ソルバー | 適応モーメント推定(亚当) | |
RMSPropソルバー | 平方根平均二乗伝播(RMSProp) | |
个ソルバー | モーメンタム项付き确率的勾配下法(SGDM) | |
学习 | “InitialLearnRate” |
学习 |
学習率スケジュール | 区分的な学習率スケジュール | |
学习の进行状况 | “阴谋” |
プロット |
詳細出力 | 詳細出力 | |
ミニバッチのサイズ | '迷你atchsize' |
ミニバッチのサイズ |
エポック数 | '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
、learnRateDropFactor
,および学习研讨会
を作物しし。ここここ,学习
は初期学習率であり,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正則化を適用するには,関数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;
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”
および“绝对值”
[
函数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で学習を行うには,データを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
オブジェクトです。
adamupdate
|rmspropupdate.
|sgdmupdate
|dlupdate
|dlarray
|dlgradient
|dlfeval.
|dlnetwork