『PyTorch』とは、Facebookが開発を主導したPython向けの機械学習ライブラリです。コードが書きやすく、使いやすいため、開発者から人気があります。
この記事では、PyTorchとは何か、また、インストールや実装方法を入門者に向けて詳しく解説します。
公開日:2020年8月27日
PyTorchとは?入門者にもわかりやすく解説
PyTorchとは、Pythonのオープンソース機械学習ライブラリ(Deep Learningライブラリ)です。
PyTorchで「パイトーチ」と読み、2016年1月15日、Facebookの人工知能研究グループにより初期開発されました。初版が公開された2016年から徐々に注目を集め、現在ではPythonの機械学習ライブラリとして高い人気を誇ります。
なお、Pythonについて詳しく知りたい方は「Pythonとは?何に使えるの?Pythonの特徴や使い道を詳しく解説!」を参考にしてください。
PyTorch のメリットとは?
PyTorchには、下記のようなメリットがあります。
- 直感的にコードを書ける
- 参照リソースが豊富
- define by run
それぞれのメリットを一つひとつご紹介していきます。
◎直感的にコードを書ける
PyTorch は、Pythonの機械学習プロセスで頻繁に使われるライブラリ「Numpy」と操作方法が非常に似ています。そのため、PythonエンジニアならPyTorchに短時間で慣れることができるでしょう。
なお、機械学習の計算を高速化させられる拡張モジュール「NumPy」について、詳しく知りたい方は「Pythonの拡張モジュール「NumPy」とは?インストール方法や基本的な使い方を紹介!」をご覧ください。
◎参照リソースが豊富
PyTorchではコミュニティが活発であるため、参照できる情報が豊富に存在します。そのため、操作方法や実装する上で必要な情報を入手しやすい環境です。
また、PyTorchは人工知能の研究者にも使用されているため、論文等がGitHubで公開されることも少なくありません。最新の手法を入手しやすく、最先端の機械学習プログラミングも可能です。
◎define by run
PyTorchはdefine by runとなっています。
define by runとは、動的なニューラルネットワーク構築であり、データを入力した際に定義する手法のことになります。「データを流しながら計算グラフを構築してくれるアルゴリズム」と表現すると理解しやすいかもしれません。
define by run方式は、動的フレームワークなので、直感的にRNN(再帰型ニューラルネットワーク)を書くことができる、デバックが容易といったメリットがあります。このメリットにより、PyTorchを利用するという方も多いです。
入門知識:PyTorchのテンソルとは?
PyTorchを利用する上で、テンソルの知識は必要不可欠です。
テンソルとは、PyTorchの基本となるデータ構造になります。テンソルは、正確にはtorch.Tensorと表示されるものです。
多次元配列を形成できるデータ構造で、拡張モジュールNumPyに置き換えて言うと、ndarray型に似ています。Tensor(テンソル)型とndarray型の違いは、GPUでの演算が可能な点です。
テンソルについてもっと詳しく知りたい方は「【TENSORFLOW入門】特徴や使い方をわかりやすく解説!」をご覧ください。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >いざPyTorch入門!インストール方法を解説
次に、PyTorchのインストール方法を解説します。
PyTorch公式サイトにアクセス
まずは、PyTorchの公式サイトにアクセスします。
インストール環境を確認する
次に、インストール環境を確認します。PyTorchの公式URLにアクセスすると、下記の画像のような部分があります。
一つひとつが選択できるようになっており、自分の環境に合ったインストール方法を知ることができます。以下で、選択項目について詳しく解説していきますので、参考にしてください。
- PyTorch Build
PyTorch Buildは、どのようなバージョンをインストールするかを示します。特にこだわりがない場合は、安定版のStable1.6.0を選択してください。
- Your OS
Your OSはインストール先のOSです。Linux、Mac、Windowsの3つの中から選択してください。
- Package
Packageでは、何を使ってインストールするのかを選ぶことができます。Conda、Pip、LibTorch、Sourceの4つの中から選ぶことが可能です。Windowsにインストールする場合は、Condaが推奨されています。
- Language
Languageでは、使用するプログラミング言語を選択できます。Pythonもしくは、C++/Javaの2種類から選ぶことが可能です。
- CUDA
CUDAでは、CUDAのバージョンを選択することができます。
Run this Commandの内容を確認
項目をすべて選択したら、その下のRun this Commandの中でインストールコマンドが表示されます。
例えば、PackageをPipと選択して安定バージョンをインストールする場合、下記のようなコマンドが出力されます。
1 |
pip install torch torchvision |
このコマンドを実行すれば、インストールが開始されます。
【Hands Onで学ぶ】PyTorchによる深層学習入門
人気急上昇中のAIフレームワークであるPyTorchを用いて深層学習の様々なモデルを構築し、機械学習・深層学習の基礎を固めましょう。機械学習・深層学習を"知識として知っている"人から、"使える・使いこなせる"人へとステップアップしませんか?
\無料でプレビューをチェック!/
講座を見てみるPyTorchの実装を例題で解説【サンプルコード付き】
最後に、PyTorchでネットワーク構築の実装を例題で解説します。サンプルコード付きになりますので、入門者の方も、ぜひ参考にしてください。
モデル、ネットワークの構築
まずは、使用するネットワークを定義します。PyTorchでは、tourch.nn.Moduleというクラスを継承し、自分オリジナルのネットワークを作成していくのが一般的です。今回は、クラス名をUdemyNetとし、作成していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import torch import torchvision import torchvision.transforms as transforms from torchvision import datasets class UdemyNet(torch.nn.Module): def __init__(self): super(UdemyNet, self).__init__() self.net1 = torch.nn.Linear(28*28, 1000) self.net2 = torch.nn.Linear(1000, 10) def forward(self, x): x = self.net1(x) x = torch.sigmoid(x) x = self.net2(x) return f.log_softmax(x, dim=1) |
UdemyNetという名前でクラスを宣言し、コンストラクターの中でネットワーク構成を定義しています。ネットワーク構成は入力層と中間層、出力層の3層構造です。これらは、torch.nn.Linearで定義されています。また、その後に順伝播の関数を定義して完成です。
データ取得
次にMINISTを取得する関数を作成していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
def reading_DATA(batch=128, intensity=1.0): train_readingData = torch.utils.data.DataLoader( datasets.MNIST('./data', train=True, download=True, transform=transforms.Compose([ transforms.ToTensor(), transforms.Lambda(lambda x: x * intensity) ]) ), batch_size=batch, shuffle=True ) test_readingData = torch.utils.data.DataLoader( datasets.MNIST('./data', train=False, transform=transforms.Compose([ transforms.ToTensor(), transforms.Lambda(lambda x: x * intensity) ]) ), batch_size=batch, shuffle=True ) return {'train': train_readingData, 'test': test_readingData} |
PyTorchでは、データローダーでデータを扱います。torch.utils.data.DataLoader()の第一引数には、データセット、第二引数にバッチサイズ、第三引数にシャッフルを指定。第三引数のシャッフルをTrueにするとTensorDatasetの中身がシャッフルされます。
torch.utils.data.DataLoader()の第一引数には、クラスインスタンスであるdatasets.MNISTが指定されています。datasets.MNISTの第一引数は、データダウンロード先を指定してください。
メイン部分を記述
次に、メイン処理部分を書いていきます。先程作成したUdemyNetを構築し、reading_DATAでデータを取得しましょう。メイン部分のコードはシンプルです。下記のコードを参考にしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if __name__ == '__main__': #学習回数の定義です。 epoch = 20 # 学習結果の保存用 history = { 'train_loss': [], 'test_loss': [], 'test_acc': [], } # 先程定義したネットワークを構築 net: torch.nn.Module = UdemyNet() # MNISTのデータローダーを取得 loaders = reading_DATA() |
学習部分を作成
次に、学習部分の実装を行います。学習部分はforループを使用し、学習部分に訓練部分のループと検証用のループを作成していきましょう。訓練部分のサンプルコードは下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
"""訓練部分の実装""" loss = None # ここから学習開始です。 net.train(True) # 引数の省略は可能。今回はTrueを指定 for i, (data, target) in enumerate(loaders['train']): data = data.view(-1, 28*28) optimizer.zero_grad() output = net(data) loss = f.nll_loss(output, target) loss.backward() optimizer.step() if i % 10 == 0: print('Training log: {} epoch ({} / 60000 train. data). Loss: {}'.format(e+1, (i+1)*128, loss.item())) history['train_loss'].append(loss) |
forループで訓練部分を定義しています。output=net(data)とコードを書けば、ネットワークのデータと入力と出力ができるので、とても便利です。loss = f.nll_loss(output, target)でロス計算を定義し、ロスをもとに誤差をloss.backward()しています。
検証部分を作成
最後に、検証部分を作成します。サンプルコードは下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
""" テスト部分 """ # 学習のストップ net.eval() test_loss = 0 correct = 0 with torch.no_grad(): for data, target in loaders['test']: data = data.view(-1, 28 * 28) output = net(data) test_loss += f.nll_loss(output, target, reduction='sum').item() pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() test_loss /= 10000 print('Test loss (avg): {}, Accuracy: {}'.format(test_loss, correct / 10000)) history['test_loss'].append(test_loss) history['test_acc'].append(correct / 10000) |
訓練部分とコードは非常に似ており、訓練コードを理解できれば、テスト部分も容易に理解することができるでしょう。テスト部分では、精度を測定するために、pred = output.argmax(dim=1, keepdim=True)部分でニューロンインデックスを取得しています。
ここではPyTorchについての基礎知識とインストール方法、実装方法について解説しました。PyTourchは非常に書きやすい機械学習ライブラリで、初心者でも習得することは難しくありません。
この機会に、ぜひPyTorchを学んでみてください。
下記講座のレビューを一部紹介
評価:★★★★★
google colabを使用して環境構築の手間がなく、丁寧に教えてくれているので、短時間で勉強を進めることができる。
評価:★★★★★
LSTMなど高等なディープラーニングモデルの解説と実装までを簡潔かつ丁寧に説明していただき、とても満足しております。
最新情報・キャンペーン情報発信中