PytorchのNNモジュールと最初のニューラルネットワークモデルを実装する

PytorchのNNモジュールと最初のニューラルネットワークモデルを実装する

PyTorch でモデルを構築します (主に NN モジュール)。

nn.リニア

nn.Linear は線形レイヤーを作成します。ここでは、入力ディメンションと出力ディメンションをパラメータとして渡す必要があります。

  1. 線形 = nn.Linear(10, 2)
  2. example_input = torch.randn(3, 10)
  3. example_output = 線形(example_input)
  4. 出力例

上記のコードは linear で nx10 入力を受け取り、nx2 出力を返します。

  1. 印刷(例の入力)
  2. print(例の出力)
  3.  
  4. テンソル([[ 1.1122, -0.1381, 0.5547, -0.3326, -0.5676, 0.2810, -0.5521, -0.8729,
  5. -0.6627, 0.8729],
  6. [ 1.9134, 0.2397, -0.8340, 1.1532, -1.6725, 0.6171, -0.0357, -1.6848,
  7. -0.8454, 0.3876],
  8. [-0.0786、-0.1541、-0.8385、-0.1587、-0.0121、1.4457、-0.0132、1.5653、
  9. -1.6954, -0.9350]])
  10. # 出力は次のようになります
  11. テンソル([[-0.1249, -0.8002],
  12. [-1.0945, -0.2297],
  13. [-0.3558, 0.8439]], grad_fn=<AddmmBackward>)

nn.レル

nn.Relu は、指定された線形出力に対して relu 活性化関数演算を実行します。

  1. relu = nn.ReLU()
  2. relu_output = relu(example_output)
  3. relu_出力
  4.  
  5. # 出力は次のようになります
  6. テンソル([[0.0000, 0.0000],
  7. [0.0000, 0.0000],
  8. [0.0000, 0.8439]], grad_fn=<ReluBackward0>)

nn.バッチノルム1d

nn.BatchNorm1d は、異なる入力バッチ間で一貫した平均と標準偏差を維持するために使用される正規化手法です。

  1. バッチノルム = nn.BatchNorm1d(2)
  2. バッチノルム出力 = バッチノルム(relu_output)
  3. バッチノルム出力
  4.  
  5. # 出力は次のようになります
  6. テンソル([[ 0.0000, -0.7071],
  7. [ 0.0000, -0.7071],
  8. [ 0.0000, 1.4142]], grad_fn=<NativeBatchNormBackward>)

nn.シーケンシャル

nn.Sequential は、一連の操作を一度に作成します。 Tensorflow の Sequential とまったく同じです。

  1. mlp_layer = nn.シーケンシャル(
  2. nn.線形(5, 2)、
  3. nn.バッチノルム1d(2)、
  4. nn.ReLU()
  5. テスト例 = torch.randn(5,5) + 1
  6. print( "入力: " )
  7. 印刷(テスト例)
  8. print( "出力: " )
  9. mlp_layer(test_example) を印刷します
  10.  
  11. # 出力は次のようになります
  12. 入力:
  13. テンソル([[ 1.4617, 1.2446, 1.4919, 1.5978, -0.3410],
  14. [-0.2819, 0.5567, 1.0113, 1.8053, -0.0833],
  15. [ 0.2830, 1.0857, 1.2258, 2.6602, 0.1339],
  16. [ 0.8682, 0.9344, 1.3715, 0.0279, 1.8011],
  17. [ 0.6172, 1.1414, 0.6030, 0.3876, 1.3653]])
  18. 出力:
  19. テンソル([[0.0000, 0.0000],
  20. [0.0000, 1.3722],
  21. [0.0000, 0.8861],
  22. [1.0895, 0.0000],
  23. [1.3047, 0.0000]], grad_fn=<ReluBackward0>)

上記のモデルでは、オプティマイザーがなければ、対応する損失を取得できません。

  1. torch.optim をoptimとしてインポートします
  2. adam_opt = optim.Adam(mlp_layer.parameters(), lr=1e-1)
  3. # ここでlrは学習率、1e-1は0.1を表します
  4. 訓練例 = torch.randn(100,5) + 1
  5. adam_opt.ゼロ_grad()
  6. # 1から平均値を引いたものを単純な損失関数として使用します
  7. cur_loss = torch.abs (1 - mlp_layer(train_example)).mean()
  8. cur_loss.後方()
  9. # パラメータの更新
  10. adam_opt.ステップ()
  11. cur_loss.data を印刷します
  12. # 出力は次のようになります
  13. テンソル(0.7467)

上記では 1 エポックしか使用していませんが、線形モデルトレーニングの損失は 0.7467 でした。上記は、NN モデルを構築するプロセス全体です。

最初のニューラルネットワークモデル

1 つの隠し層を使用して 1 つの出力ユニットを開発する最初の分類ニューラル ネットワークを実装しましょう。

まず、次のコマンドを使用してPyTorchライブラリをインポートします。

  1. 輸入トーチ
  2. torch.nnをnnとしてインポートする

ニューラルネットワークの実行を開始するために、すべてのレイヤーとバッチサイズを以下のように定義します。

  1. n_in、n_h、n_out、バッチサイズ = 10、5、1、10

ニューラルネットワークは入力データを組み合わせて対応する出力データを取得するため、次のように同じ手順に従います。

  1. x = torch.randn(バッチサイズ、n_in)
  2. y = トーチ.テンソル([[1.0], [0.0], [0.0],
  3. [1.0]、[1.0]、[1.0]、[0.0]、[0.0]、[1.0]、[1.0]])

シーケンシャルモデルを作成します。シーケンシャルモデルを作成するには、次のコードを使用します。

  1. モデル = nn.Sequential(nn.Linear(n_in, n_h),
  2. nn.ReLU()、
  3. nn.Linear(n_h, n_out)、
  4. nn.シグモイド())

損失関数は、以下に示すように、勾配降下法オプティマイザの助けを借りて構築されます。

  1. # 損失関数を構築する
  2. 基準 = torch.nn.MSELoss()
  3. # 最適化ツールの構築
  4. オプティマイザー = torch.optim.SGD(model.parameters(), lr = 0.01)

指定されたコード行で反復ループを使用して勾配降下モデルを実装します。

  1. # 勾配降下法
  2. 範囲(50)内のエポックの場合:
  3. # フォワードパス: x をモデルに渡して予測された y を計算する
  4. y_pred = モデル(x)
  5.  
  6. # 損失を計算する
  7. 損失 = 基準(y_pred, y)
  8.  
  9. # グラデーションを0にクリア
  10. オプティマイザ.zero_grad()
  11.  
  12. # バックプロパゲーション、勾配の解決
  13. 損失.後方()
  14.  
  15. # モデルパラメータを更新する
  16. オプティマイザ.ステップ()
  17. エポック% 10 == 0の場合:
  18. print( 'エポック: ' , エポック, '損失: ' , loss.item())

出力は次のようになります

  1. エポック: 0 損失: 0.2508794665336609
  2. エポック: 10 損失: 0.24847669899463654
  3. エポック: 20 損失: 0.24615907669067383
  4. エポック: 30 損失: 0.24392127990722656
  5. エポック: 40 損失: 0.24175791442394257

【編集者のおすすめ】

  1. トレンド検索No.1! B駅のアップマスターはAIを使って李大昭、陳延年らを笑顔にした
  2. ネットワークエンジニア必読! IP アドレス、サブネット マスク、ゲートウェイをわかりやすく説明するにはどうすればよいでしょうか?
  3. マイクロソフト、Windows 11 のシャットダウンと再起動時に「更新時間」の推定値を追加
  4. Windows 11 には IE ブラウザがありません。Edge で IE モードを有効にする方法を説明します。
  5. Windows 11 プレビュー版が突然登場しました! Windows 11 を紹介する膨大な画像

<<:  重要なお知らせです!顔認識のために服を着用する必要があります!

>>:  注目の話題レビュー:人工知能市場規模は100兆元を超え、爆発的な成長を導く

ブログ    

推薦する

データ サイエンティストまたは AI エンジニアになるために独学するにはどうすればよいでしょうか?これらの9つのポイントを克服する必要があります

誰もが教室でデータサイエンス、人工知能、機械学習を学ぶ時間があるわけではありませんし、誰もがこれらの...

シングルチッププロセッサの終焉?アップルとNVIDIAはマルチチップパッケージングに興味を持っており、相互接続技術が鍵となる

3月10日、Appleは2022年春のカンファレンスで、M1 Maxチップのアップグレード版であるM...

2018年は人類の墓掘り元年となるのか?人工知能のせいではない

2018年が近づいてきました。2018年のテーマを大胆に予想すると、間違いなく人工知能が人気のテーマ...

SDNアーキテクチャに基づくデータセンターネットワークルーティングアルゴリズムの需要分析

現在のネットワーク情報技術の急速な発展に伴い、ネットワーク アーキテクチャはますます複雑になっていま...

...

高速ドローンは森の中を自律的に飛行し、旅の間中独自のルートを計画し、最高時速40キロメートルで飛行する。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIを使って死後の意識を蘇らせることは信頼できるのか?デジタル不滅には経済計算が必要

十分なデータがあれば、愛する人が亡くなった後でも、その人の意識を生かし続けることができます。それは何...

人工知能は正面の顔に基づいて複数の横顔を生成し、生成的敵対ネットワークを使用して多角度の側面顔を生成します。

人工知能は正面の顔に基づいて複数の側面の顔を生成し、生成的敵対的ネットワークを使用して多角度の側面の...

人工知能とモノのインターネットの統合後の応用シナリオは何ですか?

AI をクラウドからエッジに移行することで、主要市場で IoT の幅広い導入を妨げてきた帯域幅とセ...

AI、自動化、そして仕事の未来: 取り組むべき10の課題

[[236355]]職場で機械が人間の労働に取って代わるにつれ、その恩恵を受けるためには私たち全員が...

古代都市ポンペイを「ハイテク」な方法で訪れるにはどうすればいいでしょうか?

ビッグデータダイジェスト制作著者: カレブ西暦79年、ベスビオ山が噴火し、その麓にあったポンペイの街...

...

能力と信頼性の両方を備えることはできますか? GPT-4やGeminiなどのマルチモーダルモデルの評価レポートはこちら

2023 年には、マルチモーダル大規模モデルの飛躍的な発展が見られるでしょう。マルチモーダル大規模言...

モザイクを使用するのは安全ですか? AIがモザイクを除去し、導入から3日間で約7,000個の星を獲得

パスワードを隠すためにまだモザイクを使用していますか? 「見透かされる」ことには注意してください。ピ...

AIが別のAIに命令する、GAN+CLIPの組み合わせで「CGアーティスト」に

[[407645]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...