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

ブログ    

推薦する

人工知能は将来言語をどのように変えるのでしょうか?

人工知能 (AI) とは、人間の知的思考や行動の方法や技術をシミュレートすることで、コンピュータ シ...

...

...

...

人工知能は耳の画像だけで年齢と性別を正確に判別できる

画像処理のためのディープラーニング入門:耳のバイオメトリクスは注目の研究トピックとなっている[1]。...

誰でも大きなモデルを使用できます。よく構成されたプロンプトにより、簡単に始めることができます。

プロンプトは、中国語ではプロンプトワードと翻訳でき、大規模なモデルが特定のコンテンツを生成するように...

...

さあ、アルゴリズムの複雑さをもう一度理解しましょう!

[[346356]] 0. はじめにみなさんこんにちは。私は、複数選択パラメータのプログラマーポッ...

チップレベルのエッジAIが次世代のIoTを推進

エッジ コンピューティングは、IT アーキテクトや組み込み開発者にさまざまな選択肢を提示する難しい問...

人工知能がインダストリー4.0における製造業に革命をもたらす

人工知能 (AI) という用語は、流行語の地位を超え、業界全体にわたる技術革新の基礎となっています。...

Hiveテクノロジーイノベーションカンファレンスは、ドローン技術の進化とビジネスモデルの革命をリードします

2018年1月23日、北京ハイブアグロテック株式会社(以下、ハイブロボティクス)は、JDグループ本社...

人工知能は人々を失業させるだけでしょうか?マッキンゼーの調査と分析では、異なる答えが出ました。

AIへの追加投資は2030年までに雇用の5%に貢献し、創出される追加の富は労働需要を促進し、雇用を...

...

TypeScript 実践アルゴリズムシリーズ (XII): Map と HashMap の実装

この記事では、辞書とハッシュテーブルの実装のアイデアを詳しく説明し、TypeScript を使用して...

量子超越性のマイルストーン! Googleの量子コンピュータは47年分の計算を6秒で完了し、世界初のスーパーコンピュータを上回る

Googleは再び「量子超越性」を達成したのか?最近、Google は、同社の量子コンピュータが、世...