[[406246]] PyTorch とは何ですか? PyTorch は、最大限の柔軟性と速度を備えたディープラーニング研究プラットフォームを提供する Python ベースの科学計算パッケージです。 テンソルテンソルは NumPy の n 次元配列に似ており、計算を高速化するために GPU でも使用できます。 簡単なテンソルを構築して出力を確認しましょう。まず、5×3 の初期化されていない行列を構築する方法を見てみましょう。 - 輸入トーチ
- x = トーチ.空(5, 3)
- 印刷(x)
出力は次のようになります。 - テンソル([[2.7298e+32, 4.5650e-41, 2.7298e+32],
- [4.5650e-41, 0.0000e+00, 0.0000e+00],
- [0.0000e+00, 0.0000e+00, 0.0000e+00],
- [0.0000e+00, 0.0000e+00, 0.0000e+00],
- [0.0000e+00, 0.0000e+00, 0.0000e+00]])
次に、ランダムに初期化された行列を構築してみましょう。 - x = トーチ.rand(5, 3)
- 印刷(x)
出力: - テンソル([[1.1608e-01, 9.8966e-01, 1.2705e-01],
- [2.8599e-01, 5.4429e-01, 3.7764e-01],
- [5.8646e-01, 1.0449e-02, 4.2655e-01],
- [2.2087e-01, 6.6702e-01, 5.1910e-01],
- [1.8414e-01, 2.0611e-01, 9.4652e-04]])
データから直接テンソルを構築します。 - x = トーチ.テンソル([5.5, 3])
- 印刷(x)
出力: - テンソル([5.5000, 3.0000])
均一な長いテンソルを作成します。 - x = トーチ.LongTensor(3, 4)
- x
-
- テンソル([[94006673833344, 210453397554, 206158430253, 193273528374],
- [ 214748364849, 210453397588, 249108103216, 223338299441],
- [ 210453397562, 197568495665, 206158430257, 240518168626]])
「浮遊テンソル」- x = トーチ.FloatTensor(3, 4)
- x
-
- テンソル([[-3.1152e-18, 3.0670e-41, 3.5032e-44, 0.0000e+00],
- [nan, 3.0670e-41, 1.7753e+28, 1.0795e+27],
- [ 1.0899e+27, 2.6223e+20, 1.7465e+19, 1.8888e+31]])
「スコープ内でテンソルを作成する」- torch.arange(10, dtype= torch.float )
-
- テンソル([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
テンソルの再構築- x = torch.arange(10, dtype= torch.float )
- x
-
- テンソル([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
テンソルの形状を変更するには、.view を使用します。 - x.view ( 2 , 5 )を見る
-
- テンソル([[0., 1., 2., 3., 4.],
- [5., 6., 7., 8., 9.]])
-1 テンソルのサイズに基づいて次元を自動的に識別します。 - x.view ( 5 , -1) の
-
- テンソル([[0., 1.],
- [23。]、
- [4., 5.],
- [6., 7.],
- [8., 9.]])
テンソル軸の変更テンソル軸の変更: 2つの方法 view と permute view はテンソルの順序を変更しますが、 permute は軸のみを変更します。 - x1 = torch.tensor([[1., 2., 3.], [4., 5., 6.]])
- print( "x1:\n" ,x1) を出力します。
- print( "\nx1.shape: \n" , x1.shape)
- print( "\nx1.view(3, -1): \n" , x1.view ( 3 , -1))
- print( "\nx1.permute(1, 0): \n" , x1.permute(1, 0))
-
-
- x1:
- テンソル([[1., 2., 3.],
- [4., 5., 6.]])
-
- x1.形状:
- トーチ.サイズ([2, 3])
-
- x1.ビュー(3、-1):
- テンソル([[1., 2.],
- [3., 4.],
- [5., 6.]])
-
- x1.permute(1, 0):
- テンソル([[1., 4.],
- [2., 5.],
- [3., 6.]])
テンソル演算次の例では、加算演算を見てみましょう。 - y = トーチ.rand(5, 3)
- 印刷(x + y)
出力: - テンソル([[0.5429, 1.7372, 1.0293],
- [0.5418, 0.6088, 1.0718],
- [1.3894, 0.5148, 1.2892],
- [0.9626, 0.7522, 0.9633],
- [0.7547, 0.9931, 0.2709]])
サイズ変更: テンソルの形状を変更する場合は、「torch.view」を使用できます。 - x = トーチ.randn(4, 4)
- y = x.view (16)
- # サイズ -1 は他の次元から推測されます
- z = x.view (-1, 8)
- 印刷( x.size (), y.size (), z.size ( ))
出力: - トーチ.サイズ( [ 4, 4]) トーチ.サイズ( [ 16]) トーチ.サイズ( [ 2, 8])
PyTorch と NumPy の変換NumPy は、大規模な多次元配列と行列のサポート、およびこれらの配列を操作する高レベルの数学関数の大規模なコレクションを追加する Python プログラミング言語のライブラリです。 Torch Tensor を NumPy 配列に変換したり、その逆を行ったりするのは簡単です。 Torch Tensor と NumPy 配列は基礎となるメモリの場所を共有するため、一方を変更するともう一方も変更されます。 「TorchテンソルをNumPy配列に変換する:」- a = トーチ.ones(5)
- 印刷(a)
出力: tensor([1., 1., 1., 1., 1.]) - b = a.numpy()
- 印刷(b)
出力: [1., 1., 1., 1., 1.] 合計演算を実行して値の変化を確認してみましょう。 - a.add_(1)
- 印刷(a)
- 印刷(b)
出力: - テンソル([2., 2., 2., 2., 2.])
- [2. 2. 2. 2. 2.]
「NumPy配列をTorchテンソルに変換する:」- numpyをインポートする いいえ
- a = np.ones(5)
- b = torch.from_numpy(a)
- np.add (a, 1,出力=a)
- 印刷(a)
- 印刷(b)
出力: - [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 オブジェクトはそれがどのように作成されたかを追跡します。 - x = torch.tensor([1., 2., 3.], requires_grad= True )
- print( 'x:' ,x)を出力します。
- y = torch.tensor([10., 20., 30.], requires_grad= True )
- print( 'y:' ,y)
- z=x+y
- print( '\nz = x + y' )を出力します。
- print( 'z:' ,z)
-
- x: テンソル([1., 2., 3.], requires_grad= True )
- y: テンソル([10., 20., 30.], requires_grad= True )
-
- z=x+y
- z: テンソル([11., 22., 33.], grad_fn=<AddBackward0>)
requires_grad=True なので、 z は 2 つのテンソル z = x + y を追加することによって生成されることを認識します。
- s = z.sum ( ) の和
- プリント
-
- テンソル(66., grad_fn=<SumBackward0>)
s はその数字の合計によって作成されます。 .backward() を呼び出すと、後方パスは s から始まります。その後、勾配を計算できます。 - s.後方()
- print( 'x.grad:' ,x.grad)
- print( 'y.grad:' , y.grad)
-
- x.grad: テンソル([1., 1., 1.])
- y.grad: テンソル([1., 1., 1.])
次の例では、log(x)の導関数を1 / xとして計算します。 - 輸入トーチ
- x = torch.tensor([0.5, 0.75], requires_grad= True )
- # 1 / x
- y = トーチ.log(x[0] * x[1])
- y.後方()
- x.grad # テンソル([2.0000, 1.3333])
【編集者のおすすめ】 - これら 7 つの Linux コマンドはどのように使用しますか?
- おそらくこれはこれまでで最高の Git チュートリアルです。
- WeChatミニプログラムのインフラストラクチャの簡単な分析
- 後悔の薬がここにあります! iOS 15からiOS 14.6にダウングレードする方法の詳細なグラフィックチュートリアル
- WebAssembly をベースにした人気の言語プロジェクト
|