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

ブログ    
ブログ    

推薦する

...

...

...

...

5G、IoT、AI、機械学習は2021年に最も重要なテクノロジーとなる

[[353503]]画像ソース: https://pixabay.com/images/id-575...

Appleは自動車製造を諦めてAIに目を向けたが、Li Xiang氏はこう答えた。「その通りだ!」その背後にある真実は人々に深く考えさせる

この2日間で大きなニュースがありました。Appleが自動車の製造をやめると発表したのです。このニュー...

研究者はディープラーニングモデルを使って交通事故を予測する

[51CTO.com クイック翻訳]現在の世界は、コンクリートやアスファルトでできた巨大な迷路のよう...

Windows Update で使用される指数アルゴリズムにより、XP マシンの速度が大幅に低下する

Windows XP ユーザーは、現在の XP が 2001 年にリリースされた XP よりも遅いこ...

人工知能の3つの人生を10分で紹介します

AIは2016年以来最もホットなキーワードであり、それについてはさまざまな意見があります。バブルがは...

ディープラーニングに関しては、こちらをお読みください

編集者注: この記事の著者は、USTC のジュニアクラスの卒業生で投資家の Wang Chuan で...

人工知能とは何かについて10分ほどお話ししましょう。

1999年、ハリウッドSF映画史上最も重要なSF映画『マトリックス』が公開されました。この映画は、...

これを読めば、大きな整数の乗算と分割統治アルゴリズムを学ぶことができます。

[[352004]]データ暗号化処理には多くの複雑な暗号化アルゴリズムがあり、これらの暗号化アルゴ...

人工知能がいかにして質の高い経済発展を可能にするか

[[315132]]中国科学技術院発展戦略研究員 李秀全氏へのインタビュー第1次、第2次、第3次産業...

...