pytorchアダム・ソース

最適な調整機能について
パッケージを削除します。https://ptorch.com/docs/1/optim

クラスtorch.optim.Optimizer(パラメータ、デフォルト)
すべての最適化のための基本クラス。

パラメータ:

params(反復可能) -変数の反復またはのdictすることができます。変数を最適化するかを指定します。
defaults-(辞書):辞書のデフォルトは最適化オプションを(パラメータを設定するパラメータのオプションはデフォルト値を使用します指定されていない)があります。
load_state_dict(state_dict)
積載状態オプティマイザ

パラメータ:

state_dict(辞書) -状態オプティマイザ。それはstate_dictする必要があります()オブジェクトの呼び出しが返されます。
state_dict()
状態オプティマイザは、辞書を返します。

これは、2つの要素が含まれています。

状態-辞書は、最適化の現在の状態を保持します。これは、最適化されたクラス間の違いが含まれています。
param_groups -辞書が設定されたすべてのパラメータが含まれています。
ステップ(クロージャ)は
、単一の最適化ステップ(パラメータ更新)を実行します。

異なる最適化演算子
リファレンス:Moの迷惑なビデオ偉大な神は、直接Baiduの検索ポータルを与えないように。

まず、四つの基本的な演算子の交換に最適化されたコード:

SGDは、確率的勾配降下法であります

opt_SGD = torch.optim.SGD(net_SGD.parameters()、LR = LR)

勢いが勢いを加速し、勢いはSGDで関数の値を指定することができます

opt_Momentum = torch.optim.SGD(net_Momentum.parameters()、LR = LR、勢い= 0.8)

パラメータのアルファを指定RMSprop

opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters()、LR = LR、アルファ= 0.9)

アダムはベータパラメータ=(0.9、0.99)

= torch.optim.Adam opt_Adam(net_Adam.parameters()、LR = LR、ベータ=(0.9、0.99))
の公式ドキュメントで#ルック
クラスtorch.optim.Adam(パラメータ、LR = 0.001 、ベータ=(0.9、 0.999)、EPS = 1E-08 、weight_decay = 0)[ソース]
アダムアルゴリズムを実現します。
それは、アダム:確率的最適化のための方法で提示します。

#パラメータ:

params (iterable) – 用于优化的可以迭代参数或定义参数组
lr (float, 可选) – 学习率(默认:1e-3)
betas (Tuple[float, float], 可选) – 用于计算梯度运行平均值及其平方的系数(默认:0.9,    0.999)
eps (float, 可选) – 增加分母的数值以提高数值稳定性(默认:1e-8)
weight_decay (float, 可选) – 权重衰减(L2范数)(默认: 0)
step(closure)  #执行单个优化步骤。

#パラメータ:

closure (callable,可选) – 重新评估模型并返回损失的闭包。

注意:勢い勾配降下法は、一般的な加速度です。SGDの一般的なため、発現は、負の勾配方向に減少されます。勢いの用語とSGDと絵の形式は次のとおりです。

運動量因子、上記式の人気の理解がある場合、最後の運動量(つまり)と今回負の勾配方向は減少の大きさが増加することは、同じであるので、これは、収束を加速を達成することができる場合には、ありますプロセス。

レート調整を学ぶ
我々はニューラルネットワークを与えることができ、時間の初めに最初の「体験」学習率を添付:

LR = 1E-3 #SGD

LR = 1E-3 #Adamは、一般に、比較的小さな学習率を必要とします

次に、異なる層のためにそれを行う方法を学ぶの異なるレートを与えたいと仮定?

参考:https://www.cnblogs.com/hellcat/p/8496727.html

#0.9 =、異なるネットワーク学習率のclassifiter学習率が1E-2に設定されているため運動量のすべてを異なるモジュールの開発を指示

オプティマイザ= optim.SGD([{ 'のparamsは':net.features.parameters()}、#默认LR是1E-5
{ 'paramsは':net.classifiter.parameters() 'LR':1E-2}] 、LR = 1E-5、運動量= 0.9)

## =======================層ユニットは、学習の異なる層に対して異なるレートを指定します

指定されたオブジェクト層## classifiterモジュール0番目と3番目の抽出

special_layers = t.nn.ModuleList([[0]、net.classifiter net.classifiter [3])

識別層パラメータを取得し##

special_layers_params =リスト(マップ(ID、special_layers.parameters()))
プリント(special_layers_params)

## ID取得パラメータを指定されていない層

フィルタ= base_params(ラムダP:ないspecial_layers_paramsでid§、net.parameters())
オプティマイザt.optim.SGD =([{ 'paramsは':base_params}、
{ 'paramsは':special_layers.parameters() 'LR' :0.01}]、LR = 0.001 )
あなたは訓練過程で、あなたの損失を発見したときに実際に上昇しているが、そう一般的に言えば、あなたは学習率が大きすぎる設定されているこの時点です。今回は私たちのダイナミックな学習率を調整する必要があります。

デフadjust_learning_rate(オプティマイザ、エポック、T = 10):
「」「10によって減衰した初期LRに学習率を設定し、すべてのtエポック、デフォルト= 10" 」」
new_lr = LR *(0.1 **(エポック// T) )
optimizer.param_groupsでparam_group用:
param_group [ 'LR'] = new_lr
官方文档中还给出用

torch.optim.lr_schedulerは学習率を調整するためのサイクルの数に基づいて、多数の方法を提供します。

torch.optim.lr_scheduler.ReduceLROnPlateau異なる学習率を設定するために、測定の認証結果に基づいて。

参考:https://ptorch.com/docs/1/optim

その他のパラメータ調整戦略
1.L2-正則の上にフィット防ぎます

質量減衰(減衰量)は、究極の目的は、オーバーフィッティング防止するためです。機械学習やパターン認識では、過剰適合が存在するであろう、そしてネットワークは徐々にネットワークの重みを過剰適合するとき、徐々に大きくなり、したがって、オーバーフィッティングを避けるために、誤差関数が追加されペナルティ項一般的に使用される用語重い罰所有正方形であります減衰定数の和を掛けました。これは、大規模な重みを罰するために使用されます。損失関数は、重み減衰が正則化項(正則化)にある係数前述の、正則用語の複雑さは、一般にモデルを示すので、ロールの重量減衰は重量大きい減衰場合、損失関数のモデルの影響の複雑さを調節することですまた、大規模で複雑なモデルの機能の損失の値。

パラメータ[weight_decay、0.0005】一般勧告を設定する場合、これは、オプティマイザによって定義されます。

= torch.optim.Adam opt_Adam(net_Adam.parameters()、LR = LR、ベータ=(0.9、0.99)、EPS = 1E-06、weight_decay = 0.0005)
2バッチ正規。BATCHの正規化は、ニューラルネットワークにおける活性化関数の前を指し、正規化機能に従うだろう、そうすることの利点は3つある:

ネットワークフローに勾配を増やします。すべて[0,1]にスケーリング前記正規化勾配の消失現象を回避するため、逆行性伝播時間は約1である、とすることができます。
学習率を向上させます。データはすぐに収束に到達するために正常化しました。
トレーニングモデルの初期化への依存を減らします。
パラメータの選択に依存削減
通常の説明の一部:https://blog.csdn.net/hjimce/article/details/50866313

図3に示すように、ドロップアウト層が追加されました:典型的には0.5ドロップアウトに設定します

図4に示すように、統合されたアプローチ

最後に、いくつかのメモの損失に訓練プロセスで:

参考:https://blog.csdn.net/LIYUAN123ZHOUHUI/article/details/74453980
1つの列車の損失は、ネットワークが学習されていることを示す、テスト損失が減少し、減少し
たネットワークが持っていたことを示し、減少2列車の損失を、テスト損失は変わらない傾向にありますフィッティング
3つの列車の損失を一定になる傾向があり、テストの損失が学習に問題が発生した示し、変わらない傾向にある、あなたは学習率やバッチサイズ削減する必要がある
データが100%に設定していることを示す、減少4つの列車の損失を一定になる傾向があり、テストの損失を問題がある
5列車損失が上昇し、試験損失、プログラムバグの問題として(最終的にはNaNになる)、ネットワーク構造が不十分に不適切なパラメータ設定、上に列車を引き起こし、設計することができる立上り

著者:angnuan123
出典:CSDN
オリジナル:https://blog.csdn.net/angnuan123/article/details/81604727
著作権:この記事はブロガーオリジナル記事です、複製、ボーエンのリンクを添付してください!

関連記事

おすすめ

転載: www.cnblogs.com/jfdwd/p/11239564.html
おすすめ