PyTorchとは?概要と導入方法をチェックしよう!

Deep Learningのフレームワークについて、以前紹介記事を書きました。

Tensorflowだけじゃない?ディープラーニングフレームワーク8選!
更新日 : 2018年12月13日

この記事では、その記事でも紹介した深層学習フレームワークの一つ、PyTorchについて紹介します!

Deep Learning研究の分野で大活躍のPyTorch、書きやすさと実効速度のバランスが取れたすごいライブラリです。

※ この記事のコードはPython 3.6, PyTorch 1.0で動作確認しました。

PyTorchとは

引用元:PyTorch https://pytorch.org/tutorials/

 

PyTorchの特徴

PyTorchは、Python向けのDeep Learningライブラリです。

Facebookが開発を主導し、その書きやすさと使いやすさから人気があります。

このライブラリは非常に柔軟なニューラルネットワークの記述ができ、今主流であるDeep Learningライブラリの中でもかなりの人気を誇ります。

公式ページ: https://pytorch.org/
Githubリポジトリ:https://github.com/pytorch/pytorch

公式ページのaboutによると

  • 強力なGPUアクセラレーションによるテンソル計算
  • (リバースモードの)自動微分を使いシンプルなニューラルネットワークの記述が可能


などの特徴を持ちます。

Deep Learningの世界ではGPUを使ったアクセラレーション(高速化)は必須です。これは有名なDeep Learningフレームワークならば殆どが備える機能です。

また、自動微分についても同様です。

このPyTorchはNumpyScipyCythonなどの、Pythonでの科学計算でよく使うライブラリによって拡張することができます。

そのため、細かいところまでPythonでカスタマイズする事ができます。最新のDeep Learningモデルを実装するにはうってつけのライブラリですね。

また、Chainerという国産ライブラリに非常に似た使い心地なので、Chainerを使ったことがあるユーザーならば簡単に習得することができるでしょう。

PyTorchは人気のフレームワーク

Githubでの注目具合を見てみましょう。

このグラフは、「Deep Learningの主要フレームワーク」のGithub Star数です。

TensorflowKerasに続き第三位の位置にあります。PyTorchTensorflowに比べてやや後発なのですが、健闘していますね。

TensorflowがGoogleの強力なバックアップで開発と宣伝が進められている点を考慮すると、PyTorchの人気具合がわかるかと思います。

教材の豊富さ

PyTorchの解説動画も大量にあるので、勉強も比較的容易です。

また、書籍も数多く発表されています。

[つくりながら学ぶ! 深層強化学習 ~PyTorchによる実践プログラミング~ 単行本(ソフトカバー) – 2018/6/28 株式会社電通国際情報サービス 小川雄太郎 (著)]

[PyTorchで始める深層学習 ――数式なしで基礎から実装まで 単行本(ソフトカバー) – 2018/5/21 小泉 訓 (著)]

PyTorchはその習得のしやすさや、研究開発との親和性の高さから、発表されてすぐに世界中で人気になりました。

PyTorchのインストール

PyTorchのインストール方法は、公式ページにかかれています。

引用元:PyTorch https://pytorch.org/

 

Get Started.の右側にあるボタンは以下の手順で選択しましょう。

  1. PyTorch Build
    1. 安定版かプレビュー版かを選びます。
    2. 普通は安定版でOKです。
  2. Your  OS
    1. PyTorchをインストールしたいPCのOSを指定しましょう。
  3. Package
    1. 普通はpip、Anacondaを使っている場合はcondaを選択しましょう。
  4. Language
    1. PyTorchを使うプログラミング言語を選びます。以前はPythonだけでしたが、C++が追加されました。
    2. Pythonを使う場合は端末エミュレータで「Python -V」と打つとバージョンが確認できます。
  5. CUDA
    1. NVIDIAのGPUを使っている人はCUDAのバージョンを指定します。
    2. GPUがない場合はNoneを選択します。

自分の開発環境にあったボタンを押すと、その条件にあったインストールコマンドが「Run this command:」の横に表示されます。コピーして端末エミュレータで実行するとインストール作業が始まります。

PyTorchのコード

Define by Run

PyTorchDefine by Run式のライブラリです。

簡単に言うと、「Pythonコードをそのまま書くだけでDeep Learningモデルが実装できる」タイプのライブラリになります。また、Deep Learningの実装では、多くの場合モデルの訓練に偏微分が必要になります。

微分の計算も、ニューラルネットワークモデルが複雑になると大変になります。それこそ人の手でいちいち微分をしていては追いつかない程に。

PyTorchでは、他の多くのDeep Learningフレームワークと同様に、自動微分機能がついています。PyTorchの関数を使って実装している限り、ニューラルネットワークのバックプロパゲーションについて実装する必要はありません。

モデルの実装と、損失関数の定義までを行ってしまえば、バックプロパゲーションの計算を自動で行ってくれます。

引用元:PyTorch https://pytorch.org/about/

上のgifを見ると、変数lossに損失関数が入っていて、その損失関数をloss.backward()するだけで勾配が計算できるとあります。

実際のコード

PyTorchで実際に、簡単な三層のニューラルネットワークを実装してみました。

Jupyter上で実行して見てください。

ライブラリのimport

ハイパーパラメータの設定

データセットの用意

torchvision.datasetsからMNISTという手書き文字認識のデータセットを利用します。

Output:

minibatch学習の準備

学習は通常、minibatch単位で行います。

学習の際にminibatchをデータ全体から切り出してくれるクラスを定義しておきましょう。

ニューラルネットワークの定義

PyTorchを使ったニューラルネットワークの定義は非常に見やすいものになります。

Chainerを使ったことがある方には、わかりやすいのではないでしょうか。

モデルインスタンスの作成

ニューラルネットワーククラスからインスタンスを作ります。

この際にGPUを使うのであれば、ネットワークインスタンス.cuda()としてGPUで実行できる形にしておきましょう。

Output:

損失関数とオプティマイザの設定

ここでは例としてMNISTの分類を行うので、損失関数としてクロスエントロピーを使います。

オプティマイザは様々ありますが、Adamを使ってみます。

トレーニング

ネットワークの訓練を行う関数を定義して、これを走らせてみましょう。

ここについてはもっとスマートな書き方がありますが、今はシンプルに一般的なネットワークのfit関数を書いてみます。

Output:

評価

モデルを評価してみます。

訓練に使ったデータとは別のデータ(テストデータ)を使って、未知のデータをどのくらい正確にクラス分類できるのか確かめます。

Output:

もっと複雑なDeep Learningモデルの実装も、PyTorchならば美しく実装できるでしょう。

本腰を入れてPyTorchとDeep Learningを勉強したいならば、侍エンジニア塾のマンツーマンレッスンを受講してみてください。

深層学習に詳しいエンジニアがインストラクターになって、あなたの勉強をサポートします!

まとめ

この記事では、PyTorchについてまとめました。

PyTorchは近年の複雑なDeep Learningモデルの実装に適した、非常に柔軟なDeep Learningフレームワークです。

速度もあり、GPUへの対応も簡単です。Deep Learningの勉強を始めるには最適のフレームワークなので、是非とも使ってみてくださいね。

エラーばかりでプログラミング学習が進まない、と悩んでいませんか?

プログラミング学習を始めたけれど、エラーの原因がよく分からなかったり、調べてみたけれど解決されず「どうやって進めればいいんだろう」と放置してそのまま挫折しかけていませんか?

一度進め方が分からなくなるとやる気も失せてしまいますよね。

そんなあなたにオススメしたいのが、「侍エンジニア塾」の無料体験レッスンです。独学で1000時間以上の学習が必要と言われているところを300時間に短縮する「プログラミング独学法」をお伝えします。

下記の無料体験レッスン予約カレンダーよりお申し込みいただけます。あなたのご相談を心よりお待ちしております。

LINEで送る
Pocket

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説