nn.Module クラスに基づく線形回帰モデルの実装

nn.Module クラスに基づく線形回帰モデルの実装

[[411355]]

前回はシーケンシャルモデルを紹介しましたが、ほとんどの場合、ニューラルネットワークは基本的にクラスの形式で実装されます。

ほとんどの場合、Pytorch で nn.Module を継承するクラスを作成すると、自分で実装しなくても Pytorch が提供する多くの高レベル API を使用できるようになります。

nn.Module から作成できる最も単純なニューラル ネットワーク クラスの例を以下に示します。 nn.Module ベースのクラスの最小要件は、__init__() メソッドと forward() メソッドをオーバーライドすることです。

このクラスでは、2 つの入力と 1 つの出力を持つ単純な線形ネットワークが定義され、Sigmoid() 関数がネットワークの活性化関数として使用されます。

  1. 輸入トーチ
  2. トーチインポートnnから
  3.  
  4. クラス LinearRegression(nn.Module):
  5. __init__(self)を定義します。
  6. #親クラスのコンストラクタを継承する
  7. super(線形回帰、self).__init__()
  8. #入力と出力の次元はどちらも1です
  9. 自己線形 = nn.線形(1, 1)
  10. def forward (self, x):
  11. 出力= self.linear(x)
  12. 戻る  

それではモデルをテストしてみましょう。

  1. # LinearRegression() のインスタンスを作成する
  2. モデル = 線形回帰()
  3. 印刷(モデル)
  4. # 出力は次のようになります
  5. 線形回帰
  6. (線形): Linear(in_features=1, out_features=1, バイアス= True )

ここで、損失関数と最適化関数を定義しましょう。

  1. model = LinearRegression()#オブジェクトをインスタンス化する
  2. num_epochs = 1000 #反復回数
  3. learning_rate = 1e-2#学習率 0.01
  4. 損失 = torch.nn.MSELoss()#損失関数
  5. optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)#最適化関数

方程式によって生成されたデータセットを作成し、関数を通じてノイズを作成します。

  1. 輸入トーチ
  2. matplotlibからpyplotをpltとしてインポートします
  3. torch.autogradから変数をインポート
  4. トーチインポートnnから
  5. # データセットを作成する unsqueeze は以下と同等です
  6. x = 変数(torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1))
  7. y = 変数(x * 2 + 0.2 + torch.rand( x.size ()))
  8. plt.scatter(x.data.numpy(),y.data.numpy())
  9. plt.show()

torch.unsqueeze 関数の解釈。

  1. >>> x = トーチ.テンソル([1, 2, 3, 4])
  2. >>> torch.unsqueeze(x, 0)
  3. テンソル([[ 1, 2, 3, 4]])
  4. >>> torch.unsqueeze(x, 1)
  5. テンソル([[ 1],
  6. [2]、
  7. [3]、
  8. [4])

各エポックを走査し、損失を計算し、バックプロパゲーションによって勾配を計算し、勾配を継続的に更新し、最適化のために勾配降下法を使用します。

  1. 範囲(num_epochs)内のエポックの場合:
  2. # 予測する
  3. y_pred = モデル(x)
  4. # 損失を計算する
  5. 損失 = 損失(y_pred, y)
  6. # 以前のパラメータ値をクリアする
  7. オプティマイザ.zero_grad()
  8. #逆伝播
  9. 損失.後方()
  10. #パラメータの更新
  11. オプティマイザ.ステップ()
  12. エポック% 200 == 0の場合:
  13. print( "[{}/{}] loss:{:.4f}" .format(epoch+1, num_epochs, loss))
  14.  
  15. plt.scatter(x.data.numpy(), y.data.numpy())
  16. plt.plot(x.data.numpy(), y_pred.data.numpy(), 'r-' 、lw=5)
  17. plt.text(0.5, 0, '損失=%.4f' % loss.data.item(), fontdict={ 'サイズ' : 20, '色' : '赤' })
  18. plt.show()
  19. ####結果は次のとおりです####
  20. [1/1000] 損失:4.2052
  21. [201/1000] 損失:0.2690
  22. [401/1000] 損失:0.0925
  23. [601/1000] 損失:0.0810
  24. [801/1000] 損失:0.0802

  1. [w, b] = モデル.パラメータ()
  2. 印刷(w,b)
  3. # パラメータに含まれるもの:
  4. tensor([[2.0036]], requires_grad= True ) パラメータには以下が含まれます:
  5. テンソル([0.7006], requires_grad= True )

ここで b=0.7 は、0.2 + torch.rand(x.size()) に等しくなります。多くのトレーニングを行った後、torch.rand() は一般に約 0.5 になります。

<<:  コンピュータビジョンプロジェクトのためのオブジェクト検出の初心者向けガイド

>>:  Applitools はビジュアル AI テストをネイティブ モバイル アプリに拡張します

ブログ    
ブログ    
ブログ    

推薦する

...

...

大規模モデル開発の中核: データエンジニアリング、自動評価、ナレッジグラフとの統合

1. 大規模モデル開発におけるデータエンジニアリング1. 大規模モデル向けのデータエンジニアリングと...

...

...

烏鎮百度脳オープンデーが開催、EasyDL業界インテリジェンスイノベーションコンペティションを開始

顔認識技術はAI時代に利便性をもたらすだけでなく、効率も向上させます。 8月21日、百度ブレインオー...

Github が絶賛: モザイクテキスト = 無意味、AI があなたの思考をすべて見抜く、オープンソースに

「この写真をフォトショップで加工しましょう!」 「いいですよ、でもこの段落は検閲しないと面倒なことに...

...

...

AIが書いたコンテンツは判別が難しく、言語の専門家でさえ無力である

9月10日のニュース、2023年は人工知能の年です。チャットボットChatGPTから、グラミー賞に参...

ガートナー: 2024 年の主要な戦略的テクノロジー トレンド

2024 年までに、AI は企業で主流となり、クラウド サービス、セキュリティ、持続可能性も影響力を...

MIT、ビデオ遅延防止に新たなAI技術を採用

動画の途切れや解像度の低さは視聴者の視聴体験を著しく低下させ、広告主の利益にも悪影響を及ぼします。現...

...

ChatGPT をベースにしたインテリジェントな顧客サービス アシスタント

導入従来の顧客サービス分野は、手作業に大きく依存し、データ集約的であることが特徴です。大量のユーザー...

新たな方向性! DeepMindは知的生物の出現を促進する人工生命フレームワークを提案

最近、DeepMind の研究者たちは、知的生物の出現を促進するように設計された人工生命フレームワー...