ネットワークを構築するステップは、実質的に以下の通りです。
1.データを準備します
2.ネットワーク構造のモデルを定義します
3.損失関数を定義
4.最適化オプティマイザ定義
5.トレーニング
(オプション)、入力データおよびタグの準備5.1テンソル形式
の伝搬損失を計算する前に5.2が計算され、出力ネットワーク出力機能喪失
5.3バックプロパゲーションは、パラメータ更新
次の三つのを次いで劣らず:
5.3.1 optimizer.zero_grad()はクリア前の反復0から勾配値を計算
5.3.2 loss.backward()バックプロパゲーション、勾配値算出
5.3.3 optimizer.step()の重みを更新しますパラメータ
検証セットとトレーニングセットと印刷トレーニング情報の正確性の損失と損失の保存5.4。(オプション
6は、トレーニングプロセスの変化及び精度の損失(オプション)を示す
テストセットに7
コードのコメントは非常に詳細に書かれています
1 インポートトーチ 2 インポートF. AS torch.nn.functional 。3 インポートPLT AS matplotlib.pyplot 。4 。5 #1のデータ準備データが生成 。6 X = torch.unsqueeze(torch.linspace(-1,1,100)、薄暗い= 1 ) 。7 プリント(x.shape) 。8 Y = X * X + 0.2 * torch.rand(x.size()) 。9 #表示データスキャッタグラム 10 plt.scatter(x.data.numpy()、y.data.numpy ()) 。11 12はある #ビルドネットの網目構造を定義するために2 13である クラスネット(torch.nn.Module): 14 #1 n_feature:入力の数はn_hidden特徴:n_output隠れ層の数:出力層の数 15 DEF __init__ (セルフ、n_feature、n_hidden、n_output): 16 #スーパーネットは、親クラス・パラメータの初期化が、継承された親クラスを代表する 。17 。スーパー(ネット、自己)__init__ () 18は、 #nn.Linearが表す線形層を表しますY = W W [n_hidden、n_feature]の形状の*のX + B [n_hidden]の形状のB 。19 #の寸法Wは、それが逆になる転置前の寸法である^ T * X + B、W Y = 20 = self.hidden torch.nn.Linear(n_feature、n_hidden) 21は self.predict = torch.nn.Linear(n_hidden、n_output) 22は プリント(self.hidden.weight) 23は、 プリント(self.predict.weight) 24 位定義します前の伝播関数 25 DEF フォワード(セルフ、X): 26である 。# n_feature n_hidden n_output 27 #例(2、5)5 1 2。 28 # - ** - 29 # - - ** - - - ** 30 # - ** - - - ** 31 # ** - - - ** - - 32 # - ** - 33は、 #1 入力層、出力層、中間層 34である X = F.relu(self.hidden(X)) 35 X = self.predict(X ) 36 リターンX 37 [ #ネットワークNETの例 38れる NET =ネット(n_feature = 1、n_hidden = 10、= n_output。1 ) 39 プリント(NET) 40の #、本明細書に平均二乗誤差を使用3.損失関数の定義(平均二乗誤差) 41は = loss_func トーチ。 nn.MSELoss() 42は、 #、本明細書に確率的勾配降下法定義4.オプティマイザ 43れるオプティマイザ= torch.optim.SGD(net.parameters()、LR = 0.2 ) 44である 。#ディスプレイ毎に300回10回更新定義 45 PLTを。イオン() 46は #列車5 47 のために T における範囲(100 ): 48 予測= NET(X) #に基づいて予測XおよびX上の入力 49 = loss_func(予測、y)の損失 位(1 NN出力、2ターゲット)でなければならない 50 #5.3反向传播三步不可少 51 optimizer.zero_grad() #次の電車のための明確な勾配 52 loss.backward() #バックプロパゲーション、計算は、勾配 53 optimizer.step() #は勾配適用 54 55 場合のT%10 == 0: 56 #のプロットと表示学習プロセス 57 )plt.cla( 58 plt.scatter(x.data.numpy()、Y .data.numpy()) 59 plt.plot(x.data.numpy()、prediction.data.numpy()、' R- '、LW = 5 ) 60 plt.text(0.5、0、' 損失=%。4F '%loss.data。 numpyの()、fontdict = { ' サイズ':20、' 色': ' 赤' }) 61 plt.show() 62 plt.pause(0.1 ) 63 64 plt.ioff()
参考:Moのトラブルパイソン