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

ブログ    
ブログ    
ブログ    

推薦する

人工知能:未来への道を切り開く

[51CTO.com クイック翻訳]デジタル経済が世界を席巻する中、人工知能は今日私たちが知っている...

AIとMLに対する5つの潜在的な致命的な脅威とその解決方法

[[267669]] [51CTO.com 速訳] 人工知能(AI)と機械学習(ML)は、この時代の...

国内外のオープンソースモデルを競うLlama-2の初の総合評価

2023年7月を迎え、大規模言語モデル(LLM)の開発は新たな段階に入り、オープンソースが話題になっ...

あなたのデータは本当に安全ですか?ハッカーが機械学習を使ってデータを盗む7つの方法

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

...

報告書:人工知能は5年以内に人間の雇用を著しく脅かすだろう

ある報告書によると、自動化と人工知能は最大5年以内に人間の雇用を脅かすことになるという。このような状...

ディープラーニングは錬金術のようなものです。どんな迷信的な習慣がありますか?ユーザー: ランダムシード=42 は良い結果をもたらします

[[441423]]機械学習分野の研究者は皆、パラメータ調整という課題に直面していますが、言うほど簡...

...

報告書は、2030年までにサイバーセキュリティの分野でAIが人間に取って代わる可能性があると予測している。

新型コロナウイルス肺炎の流行は社会全体の生産と生活に影響をもたらしています。企業は、感染拡大の影響を...

phind: 開発者に特化したAI検索エンジンの誕生!

みなさんこんにちは、三元です。前回の記事では、AIを使いこなせない人は本当に将来淘汰されていくのか?...

ディープラーニングを使用した高速顔モデリング

導入顔のモデリングは、漫画のキャラクターのモデリング、顔のアートのデザイン、リアルタイムの顔の再構築...

...

2020年世界人工知能会議が開催されます! AI が人間の言語の高度な能力をいかにして習得するかをご覧ください。

2020年7月9日、2020年世界人工知能大会(WAIC)クラウドサミットが正式に開幕しました。I...

我が国はすでに「人工知能」でトップを走っています!なぜ米国は5日後にようやく強く否定し始めたのか?

[[429481]]最近、元国防総省の最高ソフトウェア責任者は、人工知能に関して、米国は今後15年...