PyTorch の 4 分間のチュートリアルで線形回帰の実行方法を学びます

PyTorch の 4 分間のチュートリアルで線形回帰の実行方法を学びます

[[271978]]

ビッグデータダイジェスト制作

編纂者:洪英飛、寧静

PyTorch は、ディープラーニング フレームワーク ライブラリの 1 つです。これは Facebook のオープンソース ディープラーニング プラットフォームであり、研究プロトタイプから本番環境への展開までシームレスに移行できます。

この記事の目的は、PyTorch の基礎を紹介し、初心者が 4 分以内に Python PyTorch の予備コードを書けるようにすることです。

以下に示すすべての関数については、中国語のドキュメントで特定のパラメータと実装の詳細を確認できます。PyTorch の中国語ドキュメントへのリンクは次のとおりです。

https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch/

コーディング前の準備

コンピュータに Python パッケージをインストールし、numpy などの科学計算パッケージをインポートする必要があります。最も重要なのは、PyTorch をインポートすることを忘れないでください。次の実行結果はすべて、jupyter ノートブックで取得されたものです。興味のある読者は、jupyter ノートブックに付属している Anaconda を自分でダウンロードできます。 (注: Anaconda は、複数のバージョンの Python の仮想コンパイル環境をサポートしています。Jupyter ノートブックは、コードをセルに分割する Web ベースのコンパイル インターフェイスです。実行結果をリアルタイムで確認できるため、非常に便利です!)

ソフトウェアの設定とインストールに関するチュートリアルはインターネット上にたくさんあるので、ここでは詳しく説明しません。書籍から得られる知識は常に浅いものであり、本当に理解するには実践する必要があります。さっそく Pytorch の世界に飛び込んでコーディングを始めましょう!

テンソル

テンソル型は、ニューラル ネットワーク フレームワークの重要な基本データ型です。これは、単一のデータ型の要素を含む多次元行列として簡単に理解できます。テンソルは演算を通じて接続され、計算グラフを形成します。

次のコード例では、2*3 の 2 次元テンソル x を作成し、データ型を浮動小数点 (Float) として指定します。

  1. 輸入トーチ
  2. #テンソル
  3. x = torch.FloatTensor ([[1,2,3],[4,5,6]])
  4. print(x.size(),"\n",x)

操作結果:

PyTorch には、テンソルに対する数学演算が多数含まれています。それ以外にも、Tensor やその他の任意のデータ型の効率的なシリアル化などの便利なユーティリティが多数提供されます。

以下は Tensor の加算/減算の例です。torch.ones(*sizes, out=None) → Tensor は、変数パラメータ sizes によって定義された形状を持つ、すべて 1 のテンソルを返します。この例では、変数 x に、対応する位置に値 1 を持つ 2 つの 2*3 テンソルが追加されます。これは、x + 2 の各次元の値に相当します。コードと実行結果は次のとおりです。

  1. #テンソルを追加する
  2. x.add_(トーチ.ones([2,3])+トーチ.ones([2,3]))

操作結果:

同様に、PyTorch は減算演算もサポートしています。次の例は、上記の実行結果に基づいて、各次元から 2 を減算して x を元の値に戻すことを示しています。

  1. #テンソルを減算する
  2. x.sub_(トーチ.ones([2,3])*2)

操作結果:

その他の PyTorch 操作については、上記の中国語のリンクを参照してください。

PyTorch と NumPy

ユーザーは PyTorch と NumPy を簡単に相互に変換できます。

以下は、np.matrix を PyTorch に変換し、次元を 1 列に変更する簡単な例です。

  1. #Numpy からトーチテンソルへ
  2. numpyをnpとしてインポートする
  3. y = np.matrix ([[2,2],[2,2],[2,2]])
  4. z = np .matrix([[2,2],[2,2],[2,2]], dtype = "int16" )
  5. x.short() @ torch.from_numpy(z)

操作結果:

ここで、@ はテンソル乗算のオーバーロード演算子です。x は [[1,2,3],[4,5,6]] の値を持つ 2*3 テンソルです。テンソルに変換された z と乗算されます。z のサイズは 3*2 で、結果は 2*2 テンソルになります。 (行列の乗算と同様に、演算結果が分からない読者は行列の乗算演算を見てください)

さらに、PyTorch はテンソル構造の再構築もサポートしています。以下は、テンソル x を 1*6 の 1 次元テンソルに再構築する例です。これは、numpy の reshape 関数に似ています。

  1. #テンソルの形状を変更する (np.reshape と同様)
  2. x.view(1,6)

操作結果:

PyTorch から NumPy への変換を概説した GitHub リポジトリは、次のリンクから入手できます。

pytorch の最新バージョンをダウンロード

CPUとGPU

PyTorch では、変数が torch.cuda.device コンテキスト マネージャーを使用してデバイスを動的に変更できるようになります。サンプルコードは次のとおりです。

  1. #変数とコピーをコンピュータデバイス間で移動する
  2. x = torch.FloatTensor ([[1,2,3],[4,5,6]])
  3. y = np .matrix([[2,2,2],[2,2,2]], dtype = "float32" )
  4.  
  5.  
  6. torch.cuda.is_available() の場合:
  7. x x =x.cuda();
  8. y = torch.from_numpy (y).cuda()
  9. +y
  10. 印刷(z)
  11.  
  12. 印刷(x.cpu())

操作結果:

PyTorch 変数

変数は Tensor を包む薄いレイヤーに過ぎず、Tensor によって定義されたほぼすべての API をサポートし、自動的にコンパイルされたパッケージの一部として巧妙に定義されます。任意のスカラー値関数の自動微分を実装するクラスと関数を提供します。

以下は、PyTorch 変数の使用例です。v1 と v2 を乗算した結果が v3 に割り当てられます。パラメータ requires_grad の属性は、デフォルトでは False です。ノード requires_grad が True に設定されている場合、それに依存するすべてのノードの requires_grad は True になり、主に勾配計算に使用されます。

  1. #変数(autograd パッケージの一部)
  2. #変数(グラフノード)はテンソルを包む薄いラッパーであり、依存関係の知識を持っています
  3. #変数は勾配の逆伝播と自動微分化を有効にします
  4. #侵害時に変数に「揮発性」フラグが設定されます
  5.  
  6.  
  7. torch.autogradから変数をインポート
  8. v1 =変数(torch.tensor([1.,2.,3.]), requires_grad = False )
  9. v2 =変数(torch.tensor([4.,5.,6.]), requires_grad = True )
  10. v3 = v1 * v2
  11.  
  12.  
  13. v3.data.numpy()

操作結果:

  1. #変数はそれを作成したものを記憶する
  2. v3.grad_fn

操作結果:

バックプロパゲーション

バックプロパゲーション アルゴリズムは、入力の重みとバイアスに対する損失の勾配を計算して重みを更新し、最終的に次の最適化反復で損失を減らすために使用されます。PyTorch は、変数がバックプロパゲーションを実行するための後方メソッドを階層的に定義する点で非常にスマートです。

以下は、差を計算するための例として sin(x) をとった簡単なバックプロパゲーション計算方法です。

  1. #sin(x) の例によるバックプロパゲーション
  2. x =変数(torch.Tensor(np.array([0.,1.,1.5,2.])*np.pi)、 requires_grad = True )
  3. y =トーチ.sin (x)
  4. x.grad
  5. y.backward(torch.Tensor([1.,1.,1.,1]))
  6.  
  7.  
  8. #勾配が本当にcox(x)であるかどうか確認する
  9. if( (x.grad.data.int().numpy()==torch.cos(x).data.int().numpy()).all() ):
  10. 印刷 ("d(sin(x)/ dx = cos (x))")

操作結果:

PyTorch での変数と勾配の計算については、次の記事を参照してください。

https://zhuanlan.zhihu.com/p/29904755

SLR: 単純線形回帰

基礎がわかったので、PyTorch を使用して単純な機械学習の問題、つまり単純な線形回帰を解決し始めることができます。これを 4 つの簡単な手順で実行します。

最初のステップ:

ステップ 1 では、y = wx + b という式で生成された人工データセットを作成し、ランダム エラーを挿入します。次の例を参照してください。

  1. #単純線形回帰
  2. # データに線を当てはめます。Y = w .x +b
  3. #決定論的な動作
  4. np.ランダムシード(0)
  5. トーチ.マニュアル_シード(0)
  6. #ステップ1:データセット
  7. w = 2 ; b = 3  
  8. x = np.linspace (0,10,100)
  9. y = w *x+b+np.random.randn(100)*2
  10. x x =x.reshape(-1,1)
  11. y y =y.reshape(-1,1)

ステップ2:

ステップ 2 では、入力データに対して線形変換を実行するために、forward 関数と torch.nn.Linear を使用するコンストラクターを備えた単純なクラス LinearRegressionModel を定義します。

  1. #ステップ2:モデル
  2. クラス LinearRegressionModel(torch.nn.Module):
  3.      
  4. def __init__(self, in_dimn, out_dimn):
  5. super(線形回帰モデル、self).__init__()
  6. self.model = torch.nn.Linear (in_dimn,out_dimn)
  7.          
  8. def forward(self,x):
  9. y_pred =自己.model(x);
  10. y_pred を返します。
  11.      
  12. モデル=線形回帰モデル( in_dimn = 1 out_dimn = 1 )

torch.nn.線形参照ウェブサイト:

pytorch.org/docs/stable/_modules/torch/nn/modules/linear.html を参照してください。

ステップ3:

次のステップ: コスト関数として MSELoss を使用し、オプティマイザーとして SGD を使用してモデルをトレーニングします。

  1. #ステップ3: トレーニング
  2. コスト= torch.nn.MSELoss ()
  3. オプティマイザー= torch.optim.SGD (model.parameters(), lr = 0.01 , momentum = 0.9 )
  4. 入力=変数(torch.from_numpy(x.astype("float32")))
  5. 出力=変数(torch.from_numpy(y.astype("float32")))
  6.  
  7.  
  8. エポックが範囲(100)の場合:
  9. #3.1 フォワードパス:
  10. y_pred =モデル(入力)
  11.      
  12. #3.2 計算損失
  13. 損失=コスト(y_pred、出力)
  14.      
  15. #3.3 バックワードパス
  16. オプティマイザ.zero_grad();
  17. 損失.後方()
  18. オプティマイザ.ステップ()
  19. (エポック+1)% 10 == 0の場合:
  20. print("epoch{},loss{}".format(epoch+1,loss.data))

操作結果:

  • MSELoss リファレンス ウェブサイト: https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.html
  • SGD リファレンス ウェブサイト: https://pytorch.org/docs/stable/_modules/torch/optim/sgd.html

ステップ4:

トレーニングが完了したら、モデルを視覚的に検査してみましょう。

  1. #ステップ4:モデルを表示して確認する
  2. matplotlib.pyplot を plt としてインポートします。
  3. plt.figure(図サイズ=(4,4))
  4. plt.title("モデルとデータセット")
  5. plt.xlabel("X");plt.ylabel("Y")
  6. plt.grid()
  7. plt.plot(x,y,"ro",ラベル= "DataSet" マーカー= "x" マーカーサイズ= 4 )
  8. plt.plot(x,model.model.weight.item()*x+model.model.bias.item(), label = "回帰モデル" )
  9. plt.凡例();plt.表示()

操作結果:

これで、PyTorch での最初の線形回帰の例のプログラミングが完了しました。さらに学習したい読者は、PyTorch の公式ドキュメント リンクを参照して、ほとんどのコーディング アプリケーションを完了できます。

関連リンク:

https://medium.com/towards-artificial-intelligence/pytorch-in-2-minutes-9e18875990fd

[この記事は51CTOコラムBig Data Digest、WeChatパブリックアカウント「Big Data Digest(id: BigDataDigest)」のオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  人工知能のサイバーセキュリティにおける7つの落とし穴

>>:  彼は17歳でiOSの脱獄の父となり、25歳で自動運転車を開発した。

ブログ    

推薦する

これら4つの業界は今後5年間で大きな利益を得るだろう

[[261735]] [51CTO.com クイック翻訳] アイリーン・リーはカウボーイ・ベンチャー...

画像認識は思ったほど難しくありません!この記事を読めばあなたも専門家になれる

[51CTO.com からのオリジナル記事] ローカルライフのシナリオには、メニュー認識、標識認識、...

スマートテクノロジーが現代のビジネス運営を改善する7つの方法

1. 生産性の向上多くの組織がリモートワークに移行するにつれて、効率性を維持することが重要になります...

大量のニューロンを必要とせず、ニューロモルフィックロボットはスピードと正確さでテーブルサッカーをプレイします

人間は機械にゲームをさせることに魅了されているようだ。1770 年という早い時期に、発明家たちは「ト...

ビッグデータ処理における人工知能の活用方法

人工知能はビッグデータを処理するための最も理想的かつ効果的な方法です。私たちの世界はビッグデータに浸...

「行動は言葉よりも雄弁である」:言語モデルはロボットにどのように適応するのか?

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

AI応用分野トップ10: AIはかつてないほど優れている

1956 年のダートマス会議で AI が提案されて以来、AI 研究はいくつかの浮き沈みを経験してきま...

21 人の専門家が語る: 2017 年の人工知能の展望

2016年はボットにとって歴史的な年でした。Facebookなどの主要プラットフォームがMessen...

...

AIをうまく活用したいなら、この2つの問題を早急に解決しなければなりません!

[[441323]]早すぎるオールインデータ文化を一夜にして構築することはできないのと同様に、分析...

AI バイアスは、偏見のない視点を必要とする未解決の問題でしょうか?

[[418851]] [51CTO.com クイック翻訳]非常に複雑な技術的アプリケーションで A...

...

...

無線ルーターのさまざまな暗号化アルゴリズムの包括的な説明

ワイヤレス ルーターは、ワイヤレス ネットワークの開発において非常に重要な役割を果たします。ここでは...

日本政府はAI規制に対して緩やかなアプローチを好んでいるが、日本企業は厳格なEU規則に従う可能性がある

日本は、急速に減少する日本の人口によって引き起こされる問題のいくつかに対処するために、人工知能(AI...