Task6.PyTorchは、より多くのニューラルネットワークの最適化の方法を理解します

1.異なるオプティマイザについて学びます

2.コードオプティマイザを書く
3.Momentum
4次元の最適化を、確率的勾配降下最適化実施
5.Ada適応勾配調整方法
6.RMSProp
7.Adam
8.PyTorch種選択オプティマイザ

勾配降下:

1.標準的な勾配降下法:GD
一度下げ各サンプルを、容易に得る局所最適に向かって最も急な位置、及び遅いトレーニングの基準電流方向

2.バッチ降下法:BGDは
もはや一度調整したサンプルの入力ですが、調整のモデルパラメータを調整し、入力コスト関数と関連するすべてのサンプルを更新するためのデータを一括した後、それがほとんどを選択し、マスターの近くに横たわっ前に、あります優れた方向。

3.確率的勾配降下法SGD
ランダムに一括して試料中の選択されました。ブラインドがダウンし、常に山のベースに、一度計算勾配で歩きます。しかし、ノイズの導入は、エラーのダウン量の更新を引き起こす可能性があります。局所最適解だけでは克服することはできません。

運動量の最適化
基準の最適化の勢いの勢い
インパクトの重量がした後、現在の重量値を変更するには、変更されます。同様の下でボールを転がすと、スクロールを加速し、慣性を持って来るための時間でした。

NAGニュートン加速勾配

NAGニュートン加速勾配が現在の速度を適用した後に、運動量は、標準的な補正係数に加算されます。盲目的momentunペレット勾配が、NAGペレットを参照し、現在の位置パラメータを更新するために、一般的にここで次の位置を知って、そのベースを遅く来ます。

エイダ適応勾配調整方法:Adagrad:学習率が自動的にスパースデータのために調整されているアルゴリズムの特性。各パラメータに同じ学習率を使用して、各ステップでの勾配降下法は、そのような掃引手法は効果的に各データは、独自の特性を設定することはできません。Adadelta(Adagradは、アルゴリズムの改善):一つの問題は、Adagradはトレーニングとして、高速な学習率単調減衰を進行していることです。、代わりに全体の歴史の正方形の移動平均二乗勾配Adadelta。

RMSProp:RMSpropアルゴリズムは学習率の調整です。Adagradは急速にAdagrad問題を減少する前に、すべての二乗の勾配を蓄積されますが、唯一のためのアルゴリズムは学習率を軽減することができ、対応する平均値を算出しRMSprop。

ADAMは:正方形の内側及び第二モーメント勾配としてAdadelta勾配場合、勾配一次モーメントは、それ自体の合計です。Adadeltaの基礎と一次モーメントの導入にアダムアルゴリズムの二次モーメントです。最初の瞬間、実際には、運動量法の勢いの内部に似ています。

1  インポートトーチ
 2  インポートデータとしてtorch.utils.data
 3  インポートFとしてtorch.nn.functional
 4  インポートPLTとしてmatplotlib.pyplot
 5  
6 = 0.01 LR
 7 BATCH_SIZE = 32
 8 EPOCH = 12
 9  
10、X = torch.unsqueeze(トーチ.linspace(-1,1,1000)、DIM = 1 11、Y = x.pow(2)+ 0.1 * torch.normal(torch.zeros(* x.size()))
 12  
13  plt.scatter(X .nu​​mpy()、y.numpy())
 14  plt.show()
 15  
16 torch_dataset = Data.TensorDataset(x、y)は
 17ローダ= Data.DataLoader(データセット= torch_dataset、BATCH_SIZE = BATCH_SIZE、シャッフル=真、num_workers = 2 18  
19 torch_dataset = Data.TensorDataset(x、y)は
 20ローダ= Data.DataLoader(
 21      セット= torch_dataset、
 22      BATCH_SIZE = BATCH_SIZE 、
 23      シャッフル= Trueの場合、
 24      num_workers = 2 25  26  
27  クラスネット(torch.nn.Module):
 28      デフ __init__ (自己):
 29          スーパー(ネット、自己)。__init__ ()
 30          
31         self.hidden = torch.nn.Linear(1,20 32          self.predict = torch.nn.Linear(20,1 33          
34      DEF フォワード(自己、X):
 35          、X = F.relu(self.hidden( X))
 36          、X = self.predict(X)
 37          リターンX
 38      
39 net_SGD = ネット()
 40 net_Momentum = ネット()
 41 net_RMSprop = ネット()
 42 net_Adam = ネット()
 43ネッツ= [net_SGD、net_Momentum、net_RMSprop、 net_Adam]
 44  
45  異なるオプティマイザ
46 opt_SGD = torch.optim.SGD(net_SGD.parameters()、LR = LR)
 47 opt_Momentum = torch.optim.SGD(net_Momentum.parameters()、LR = LR、運動量= 0.8 48 opt_RMSprop = torch.optim .RMSprop(net_RMSprop.parameters()、LR = LR、アルファ= 0.9 49 opt_Adam = torch.optim.Adam(net_Adam.parameters()、LR = LR、ベータ=(0.9、0.99 ))
 50オプティマイザ= [opt_SGD、 opt_Momentum、opt_RMSprop、opt_Adam]
 51  
52 loss_func = torch.nn.MSELoss()
 53 losses_his = []、[]、[]、[]]   レコード損失
54  
55  トレーニング
56  のためのエポックにおける範囲(EPOCH):
 57      プリント' エポック:' 、エポック)
 58      のための工程、(b_x、b_y)列挙(ローダ):          各トレーニング・ステップのための
59          のためのネットは、オプトイン、l_his (ZIPネット、オプティマイザ、losses_his):
 60              出力=ネット(b_x)              すべてのネットの出力を受ける
61の              損失= loss_func(出力、b_y)  すべてのネットの計算損失
62              opt.zero_gradを()                次の電車のための明確な勾配
63              loss.backward()                バックプロパゲーション、計算は、勾配
64              opt.step()                     適用勾配
65              l_his.append(loss.data.numpy())      #1 レコーダ損失
66枚の 
67ラベル= [ ' SGDを'' 勢い'' RMSprop '' アダム' ]
 68  用の I、l_his 列挙(losses_his):
 69     plt.plot(l_his、ラベル= ラベルは[i])と
 70 plt.legend(LOC = ' ベスト' 71 plt.xlabel(' ステップ' 72 plt.ylabel(' 損失' 73 plt.ylim((0、 0.2 ))
 74 plt.show()

 

参考ます。https://blog.csdn.net/qingxuanmingye/article/details/90514018

おすすめ

転載: www.cnblogs.com/NPC-assange/p/11373495.html