PyTorchの基本操作の詳細な説明

PyTorchの基本操作の詳細な説明

[[406246]]

PyTorch とは何ですか?

PyTorch は、最大限の柔軟性と速度を備えたディープラーニング研究プラットフォームを提供する Python ベースの科学計算パッケージです。

テンソル

テンソルは NumPy の n 次元配列に似ており、計算を高速化するために GPU でも使用できます。

簡単なテンソルを構築して出力を確認しましょう。まず、5×3 の初期化されていない行列を構築する方法を見てみましょう。

  1. 輸入トーチ
  2. x = トーチ.空(5, 3)
  3. 印刷(x)

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

  1. テンソル([[2.7298e+32, 4.5650e-41, 2.7298e+32],
  2. [4.5650e-41, 0.0000e+00, 0.0000e+00],
  3. [0.0000e+00, 0.0000e+00, 0.0000e+00],
  4. [0.0000e+00, 0.0000e+00, 0.0000e+00],
  5. [0.0000e+00, 0.0000e+00, 0.0000e+00]])

次に、ランダムに初期化された行列を構築してみましょう。

  1. x = トーチ.rand(5, 3)
  2. 印刷(x)

出力:

  1. テンソル([[1.1608e-01, 9.8966e-01, 1.2705e-01],
  2. [2.8599e-01, 5.4429e-01, 3.7764e-01],
  3. [5.8646e-01, 1.0449e-02, 4.2655e-01],
  4. [2.2087e-01, 6.6702e-01, 5.1910e-01],
  5. [1.8414e-01, 2.0611e-01, 9.4652e-04]])

データから直接テンソルを構築します。

  1. x = トーチ.テンソル([5.5, 3])
  2. 印刷(x)

出力:

  1. テンソル([5.5000, 3.0000])

均一な長いテンソルを作成します。

  1. x = トーチ.LongTensor(3, 4)
  2. x
  3.  
  4. テンソル([[94006673833344, 210453397554, 206158430253, 193273528374],
  5. [ 214748364849, 210453397588, 249108103216, 223338299441],
  6. [ 210453397562, 197568495665, 206158430257, 240518168626]])

「浮遊テンソル」

  1. x = トーチ.FloatTensor(3, 4)
  2. x
  3.  
  4. テンソル([[-3.1152e-18, 3.0670e-41, 3.5032e-44, 0.0000e+00],
  5. [nan, 3.0670e-41, 1.7753e+28, 1.0795e+27],
  6. [ 1.0899e+27, 2.6223e+20, 1.7465e+19, 1.8888e+31]])

「スコープ内でテンソルを作成する」

  1. torch.arange(10, dtype= torch.float )
  2.  
  3. テンソル([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

テンソルの再構築

  1. x = torch.arange(10, dtype= torch.float )
  2. x
  3.  
  4. テンソル([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

テンソルの形状を変更するには、.view を使用します。

  1. x.view ( 2 , 5 )を見る
  2.  
  3. テンソル([[0., 1., 2., 3., 4.],
  4. [5., 6., 7., 8., 9.]])

-1 テンソルのサイズに基づいて次元を自動的に識別します。

  1. x.view ( 5 , -1) の
  2.  
  3. テンソル([[0., 1.],
  4. [23。]、
  5. [4., 5.],
  6. [6., 7.],
  7. [8., 9.]])

テンソル軸の変更

テンソル軸の変更: 2つの方法 view と permute

view はテンソルの順序を変更しますが、 permute は軸のみを変更します。

  1. x1 = torch.tensor([[1., 2., 3.], [4., 5., 6.]])
  2. print( "x1:\n" ,x1) を出力します
  3. print( "\nx1.shape: \n" , x1.shape)
  4. print( "\nx1.view(3, -1): \n" , x1.view ( 3 , -1))
  5. print( "\nx1.permute(1, 0): \n" , x1.permute(1, 0))
  6.  
  7.  
  8. x1:
  9. テンソル([[1., 2., 3.],
  10. [4., 5., 6.]])
  11.  
  12. x1.形状:
  13. トーチ.サイズ([2, 3])
  14.  
  15. x1.ビュー(3、-1):
  16. テンソル([[1., 2.],
  17. [3., 4.],
  18. [5., 6.]])
  19.  
  20. x1.permute(1, 0):
  21. テンソル([[1., 4.],
  22. [2., 5.],
  23. [3., 6.]])

テンソル演算

次の例では、加算演算を見てみましょう。

  1. y = トーチ.rand(5, 3)
  2. 印刷(x + y)

出力:

  1. テンソル([[0.5429, 1.7372, 1.0293],
  2. [0.5418, 0.6088, 1.0718],
  3. [1.3894, 0.5148, 1.2892],
  4. [0.9626, 0.7522, 0.9633],
  5. [0.7547, 0.9931, 0.2709]])

サイズ変更: テンソルの形状を変更する場合は、「torch.view」を使用できます。

  1. x = トーチ.randn(4, 4)
  2. y = x.view (16)
  3. # サイズ -1 は他の次元から推測されます
  4. z = x.view (-1, 8)
  5. 印刷( x.size (), y.size (), z.size ( ))

出力:

  1. トーチ.サイズ( [ 4, 4]) トーチ.サイズ( [ 16]) トーチ.サイズ( [ 2, 8])

PyTorch と NumPy の変換

NumPy は、大規模な多次元配列と行列のサポート、およびこれらの配列を操作する高レベルの数学関数の大規模なコレクションを追加する Python プログラミング言語のライブラリです。

Torch Tensor を NumPy 配列に変換したり、その逆を行ったりするのは簡単です。

Torch Tensor と NumPy 配列は基礎となるメモリの場所を共有するため、一方を変更するともう一方も変更されます。

「TorchテンソルをNumPy配列に変換する:」

  1. a = トーチ.ones(5)
  2. 印刷(a)

出力: tensor([1., 1., 1., 1., 1.])

  1. b = a.numpy()
  2. 印刷(b)

出力: [1., 1., 1., 1., 1.]

合計演算を実行して値の変化を確認してみましょう。

  1. a.add_(1)
  2. 印刷(a)
  3. 印刷(b)

出力:

  1. テンソル([2., 2., 2., 2., 2.])
  2. [2. 2. 2. 2. 2.]

「NumPy配列をTorchテンソルに変換する:」

  1. numpyをインポートする いいえ 
  2. a = np.ones(5)
  3. b = torch.from_numpy(a)
  4. np.add (a, 1,出力=a)
  5. 印刷(a)
  6. 印刷(b)

出力:

  1. [2. 2. 2. 2. 2.]
  2. テンソル([2., 2., 2., 2., 2.], dtype=torch.float64)

ご覧のとおり、とても簡単です!

この PyTorch チュートリアル ブログの次回では、PyTorch の AutoGrad モジュールについて見てみましょう。

オートグラッド

autograd パッケージは、テンソルのすべての演算に対して自動微分化を提供します。

これは実行ごとに定義するフレームワークです。つまり、バックプロパゲーションはコードの実行方法によって定義され、各反復は異なる場合があります。

  • torch.autograd.function (関数の逆伝播)
  • torch.autograd. functional (計算グラフの逆伝播)
  • torch.autograd.gradcheck (数値勾配チェック)
  • torch.autograd.anomaly_mode (自動微分化中に誤ったパスを検出する)
  • torch.autograd.grad_mode (勾配が必要かどうかを設定します)
  • model.eval() と torch.no_grad()
  • torch.autograd.profiler (関数レベルの統計情報を提供します)

「では、バックプロパゲーションに Autograd を使ってみましょう。」

requires_grad=True の場合、Tensor オブジェクトはそれがどのように作成されたかを追跡します。

  1. x = torch.tensor([1., 2., 3.], requires_grad= True )
  2. print( 'x:' ,x)を出力します。
  3. y = torch.tensor([10., 20., 30.], requires_grad= True )
  4. print( 'y:' ,y)
  5. z=x+y
  6. print( '\nz = x + y' )を出力します。
  7. print( 'z:' ,z)
  8.  
  9. x: テンソル([1., 2., 3.], requires_grad= True )
  10. y: テンソル([10., 20., 30.], requires_grad= True )
  11.  
  12. z=x+y
  13. z: テンソル([11., 22., 33.], grad_fn=<AddBackward0>)

requires_grad=True なので、 z は 2 つのテンソル z = x + y を追加することによって生成されることを認識します。

  1. s = z.sum ( ) の
  2. プリント
  3.  
  4. テンソル(66., grad_fn=<SumBackward0>)

s はその数字の合計によって作成されます。 .backward() を呼び出すと、後方パスは s から始まります。その後、勾配を計算できます。

  1. s.後方()
  2. print( 'x.grad:' ,x.grad)
  3. print( 'y.grad:' , y.grad)
  4.  
  5. x.grad: テンソル([1., 1., 1.])
  6. y.grad: テンソル([1., 1., 1.])

次の例では、log(x)の導関数を1 / xとして計算します。

  1. 輸入トーチ
  2. x = torch.tensor([0.5, 0.75], requires_grad= True )
  3. # 1 / x
  4. y = トーチ.log(x[0] * x[1])
  5. y.後方()
  6. x.grad # テンソル([2.0000, 1.3333])

【編集者のおすすめ】

  1. これら 7 つの Linux コマンドはどのように使用しますか?
  2. おそらくこれはこれまでで最高の Git チュートリアルです。
  3. WeChatミニプログラムのインフラストラクチャの簡単な分析
  4. 後悔の薬がここにあります! iOS 15からiOS 14.6にダウングレードする方法の詳細なグラフィックチュートリアル
  5. WebAssembly をベースにした人気の言語プロジェクト

<<:  米国、政府による顔認識技術の使用禁止を再法制化へ

>>:  医療の発展は自動化に向かっており、手術ロボットは急速に発展している。

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ケータリングロボットが市場発展の時代を先導

[[387119]]近年、ロボット産業の急速な発展に伴い、伝統的な飲食業界も徐々に第二の春を迎えてい...

AIによる高齢者介護についてどう思いますか?

2021年の両会期間中、百度の李ロビン会長の「地域社会におけるスマート高齢者ケアの推進を加速し、テ...

人工知能は現代のテクノロジー業界をさまざまな形で変えている

AIは現代のビジネスとテクノロジーのエコシステムをさまざまな形で大きく変えてきました。過去数年間に...

...

研究報告によると、GPT-4の「知能」は大幅に低下している

7月20日、スタンフォード大学とカリフォルニア大学バークレー校の研究チームが最近GPT-4の詳細な研...

10 分でチャットボットを作成するにはどうすればよいでしょうか?

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

Microsoft は GPT-4V マニュアルを作成しました。166 ページに及ぶ完全かつ詳細な説明と、プロンプト ワードのデモ例が含まれています。

マルチモーダルキングボムモデルGPT-4V、 166ページの「取扱説明書」を公開!これは Micro...

Google が史上最強の人間の脳の「地図」を公開、3D ニューロンの「森」がオンラインで閲覧可能に

シナプスはニューラルネットワークの「橋」です。人間の脳には 860 億個のニューロンがあり、あるニュ...

小さなターゲットを検出するためのディープラーニングの一般的な方法

[[427475]]導入ディープラーニングによる物体検出、特に顔検出では、解像度が低い、画像がぼやけ...

初心者のためのデータ学習: Python でシンプルな教師あり学習アルゴリズムを実装する方法を学習します

[[220586]]編纂者:ウェンミン、ダ・ジェチョン、ティエンペイ最も広く使用されている機械学習手...

4Paradigm が分子特性予測のための生成型 3D 事前トレーニング済みモデルを開発

論文タイトル: 分子特性予測のための自動 3D 事前トレーニング論文リンク: https://arx...

AI がデータセンターを持続可能性の原動力に変える方法

これまで多くの技術進歩の基盤となってきたデータセンターは、現在、インフラストラクチャ プロバイダーだ...

モバイルビデオがグローバル化する中、テンセントクラウドは小英科技のグローバル市場拡大を支援

テンセントクラウドは9月10日、ビデオツール企業である小英科技と提携し、小英科技に技術サポートを提供...

オントロジーから始める:オペレータ関係マップの構築と応用

[[258543]]人類学者ロビン・ダンバーは、人間が親密な人間関係を維持できる最大人数は 150 ...

最も美しいデジタルガールフレンドをDIYしましょう! MITが最強の仮想人間ジェネレーターのソースコードを公開、ネイチャー誌に掲載

MITメディアラボの研究者らは、仮想キャラクターを生成するツールをオープンソース化した。このツールは...