Hello, PyTorch

PyTorch入門

PyTorchによる機械学習 & 自動微分 with GPU

PyTorch はGPUアクセラレーションをサポートした 自動微分最適化 ライブラリです。

自動微分

ニューラルネット は偏微分を多用するので PyTorch にも自動微分機能がついています

例えば、

y=x2y = x^2

を微分してみましょう。

class torch.Tenosr が持つ .backward() メソッドを使う事で微分を行なってくれます。

二階微分だって出来ます。

当然、偏微分だって出来ます。

z=x2y+3xy5+x3zx=2xy+3y5+3x2zy=x2+15xy4z = x^2y + 3xy^5 + x^3 \\ \frac{\partial z}{\partial x} = 2xy + 3y^5 + 3x^2 \\ \frac{\partial z}{\partial y} = x^2 + 15xy^4

最適化

ニューラルネットの学習には最適化の計算が必須です。 当然、PyTorchにも様々な最適化アルゴリズムが実装されています。

例えば、この式の最小値を求めてみましょう。

y=3x2+6x9y = 3x^2 + 6x - 9

PyTorch with GPU

PyTorchで、どうやってGPUを使うかを見ていきましょう。 まずは、CPUで行列の積を求めてみます。 そもそも、行列積の計算は オーダ $O(n^3) $ です。 愚直にCPUでやると遅い。

次にGPUにデータを送って計算させてみます。

GPUにデータを載せるには、torch.Tensor オブジェクトが持つ .cuda() メソッドを使います。 さらに一般化したメソッドに、 .to(device)もあります。

ちなみに、CPUとGPU別々にデータが格納されているなら、同じ場所にデータを置いてあげないと計算できません。

GPUが管理するメモリ上にあるデータをCPUが管理するメモリー上に移すには

CPUが管理するメモリ上にあるデータをGPUが管理するメモリ上に移すには

を実行します。

また、GPUが実行可能なら自動的に変数をGPUに載せていきたいのなら

とすれば、OKです。

一通りPyTorchの使い方を学んだので次から早速ニューラルネットを実装してみましょう

Last updated

Was this helpful?