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 テストをネイティブ モバイル アプリに拡張します

ブログ    

推薦する

...

分散型ディープラーニングの新たな進歩:「分散」と「ディープラーニング」の真の統合

近年、急速に発展している人工知能の分野のひとつであるディープラーニングは、NLP、画像認識、音声認識...

自動車所有者は完全自動運転を導入すべきでしょうか?マスク氏:よく分かりません

北京時間7月27日、テスラは最近、自動車所有者に「完全自動運転」(FSD)機能のサブスクリプションを...

...

クラウド セキュリティにおける生成 AI: アクションよりもノイズが多い? !

翻訳者 | ジン・ヤンレビュー | Chonglou人工知能はクラウド セキュリティの次の大きなトレ...

中国の学部生が新しいAIアルゴリズムを提案:その速度はAdamに匹敵し、パフォーマンスはSGDに匹敵する

2 人のトップ学部生。1 人は北京大学、もう 1 人は浙江大学出身です。インターンシップ中に、彼らは...

医療AIの深淵:まだ解決すべき大きな問題

5Gに加えて、人工知能は今年も引き続きホットな話題です。筆者は最近、医療人工知能のコンテストを間近で...

人工知能の解釈については、この記事を読んでください

人工知能のより一般的な定義、そしてこの分野における初期の定義は、1956 年のダートマス会議で MI...

人工知能が火星の新しいクレーターの発見に貢献

人工知能ツールによって特定された、火星の最新のクレーター群の高解像度画像。画像出典: Space.c...

AIが旅行業界に浸透し、ロボットが次の休暇を計画するようになる

編集者注: ビジネス旅行者にとって、ついに朗報が届きました。人工知能がついに旅行業界に浸透し、パーソ...

...

...

清華大学は顔認識技術に脆弱性を発見、セキュリティ問題を真剣に受け止める必要がある

このテストでは合計20台の携帯電話が選ばれ、そのうち1台は海外製、残りの19台は国内トップ5の携帯電...

世界モデルが大きな貢献を果たしました! 20以上の自動運転シナリオの偽データがリアルすぎる…

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

ディープラーニングの次の段階:ニューラルアーキテクチャの自己学習により、優れたコンピュータビジョンモデルが実現

[[275255]]ディープラーニングは人工知能モデルの先駆けです。画像認識、音声認識、テキスト理解...