TensorflowとKeras、PyTorchの比較

Pocket

1. Tensorflow、Keras、PyTorch

Tensorflowと Keras、PyTorchは現代の深層学習でよく使用されるトップクラスのフレームワークです。どんな場合に、どのフレームワークを用いたらよいのか迷うことはあるでしょう。本記事では、Tensorflow、Keras、PyTorchを比較することで、それらのフレームワークの有効な使用方法について記載します。

2. それぞれのフレームワークの概要

比較に入る前に、それぞれのフレームワークの由来や特徴を知っておきましょう。

2.1. Tensorflow

Tensorflowはエンドツーエンドかつオープンソースの深層学習のフレームワークであり、Googleによって2015年に開発・公開されました。

今回比較する3つのフレームワークの中で最もドキュメントが多く、トレーニングのサポートもしています。それだけでなく、Tensorflowは様々なスケーラブルなプロダクトやデプロイのオプションも提供しています。また、モデルの抽象度(レイヤーの名前を呼ぶだけでモデルを組むか、より深いアルゴリズムを変更するかなどの高さ)も色々あるので、非常に便利です。さらに、TensorflowはWindowsやMacOS、Androidなど多くのプラットフォームで利用できるため、今でも幅広く適用されています。

Tensorflowは名前の通り、様々なタスクにデータのフローを流しこみ、プログラムを作成するためのフレームワークです。そのため、Tensorflowにはニューラルネットワークなどの機械学習のアプリケーションに適用できる多くのシンボリックな数学ライブラリが用意されています。ちなみにTensorflowの「Tensor」は数学の概念の一つで、行列の一般化(n次元化)したものを意味します。

2.2. Keras

KerasはPythonで書かれた高レベルのニューラルネットワーク向けの効果的なAPIです。このオープンソースの深層学習ライブラリは、ディープニューラルネットワークを使った高速な実装ができるように設計されており、CNTK、Tensorflow、Theanoなどがバックエンドとして動作します

KerasはGoogleのエンジニアであるFrançois Chollet氏によって作り出され、モジュール化やユーザーフレンドリーで、拡張性があることを重視しています。低レベルの計算は処理せず、バックエンドの別のライブラリに渡します。

2017年に、KerasはTensorflowに導入されました。ユーザーはtensorflow.kerasモジュールからアクセスできます。また、Kerasライブラリは今まで通り独立して動作することもできます。

2.3. PyTorch

PyTorchは比較的新しい、Torchベースの深層学習フレームワークです。これはFacebookのAIグループによって開発され、2017年にGithubのオープンソースとして公開されました。主に自然言語処理に使用されています

PyTorchはシンプルで使いやすいことで有名です。また、柔軟性、メモリの効率的な使用、動的な計算グラフなどについても高い評価を得ていますさらに、Pythonを利用すると、コーディングをより管理しやすく、処理速度が速くなります。

3. 様々な場面における比較

比較する前に注意点は、3つのフレームワークは完全に別々ではなく、ある程度互いに関連することです。ただし、基本的な相違点はあるので、それらの相違点を見ていきましょう。

3.1. APIのレベル

Kerasは、TensorflowやCNTK、Theanoなどをバックエンドとして動作する高レベルのAPIです。そのためKerasは非常に使いやすく、構造もシンプルであり、開発の際にドキュメントを調べる時間が短縮できます。それに対して、Tensorflowは高レベルAPIと低レベルAPI両方とも提供するフレームワークなので、使い方はややわかりにくいです。

一方、PyTorchは、配列を直接操作する低レベルAPIです。PyTorchは、学術研究や、最適化を必要とする深層学習のアプリケーションに望ましいソリューションになりつつあり、最近多く注目されています。具体的には「3.3. 可読性」で述べます。

3.2. 速度

TensorflowとPyTorchは速度はあまり変わらず、高速で高いパフォーマンスを発揮します。一方、KerasはPyTorchやTensorflowと比べてパフォーマンスが低いです。

Deeply Thoughtによると具体的に、ほぼ同じ条件でそれぞれのフレームワークを用いてResNet50とVGG16、VGG19のモデルを学習しますと、学習時間(縦軸)は以下のようになります。

グラフのように、ResNet50を学習したとき、Kerasの学習時間はPyTorchとTensorflowの学習時間の2倍程度となります。また、VGG16とVGG19の学習でも、各フレームワークの学習時間の差が小さくなりますが、全体としてPyTorchとTensorflowのスピードはKerasを上回っていることがわかります。

また、各フレームワークのepochごとの平均学習時間(epoch = 10の場合)と最初のepochの学習時間を求めると、下図のような結果を得られます。

 

左図では、TensorflowとPyTorchの学習時間の差は0.14秒(Tensorflowの学習時間の1%程度)で無視できますが、この2つのフレームワークの学習時間とKerasの学習時間の差が大きいことが分かります。具体的には、TensorflowとPyTorchの平均学習時間は15秒ぐらいに対して、Kerasの学習時間は22秒で、TensorflowとPyTorchの1.5倍になります。

また、Kerasのユーザーであればよくわかると思いますが、Kerasの最初のepochの学習には時間がかかります。右図に記載の通り、最初のepochにおいては、Kerasの学習時間はTensorflowより13.41秒(80%)、PyTorchより12.17秒(70%)長くなっています。

これらの結果から、Kerasのスピードは最も遅く、PyTorchとTensorflowのスピードはぼぼ同じということが確認できました。

3.3. 可読性

Kerasはシンプルさを重視し、読みやすく簡潔なアーキテクチャを採用しています。Tensorflowは、Kerasを導入したにも関わらず、使用方法はまだ簡単とは言えません。PyTorchは複雑なアーキテクチャで、Kerasと比べて可読性は低くなります。

具体的に同じモデルのそれぞれのフレームワークによる表現を比較してみましょう。ただし、あくまでもイメージなので、それぞれのコードにはわずかな差異があります。

まずはTensorflowです。

Tensorflowのみを使用する(Kerasを使わない)場合、重みやバイアスを事前に準備した上で、いろいろな関数を定義する必要があるため、ちょっとややこしくなります。それに対して、Kerasを利用したら、以下のようになります。

案の定、Kerasを用いると、重みやバイアスなどの低いレベルのパラメータが既に整っているため、プログラムは格段にシンプルになります。ただし、低いレベルに関する変更はなかなか難しいです。また、PyTorchによるプログラムは以下のようになります。

Tensorflowほどではありませんが、Kerasと比べてやや読みにくいということがわかります。ただし慣れたら、コードを読むことでいくつかの深層学習のコンセプトが理解できると言われています。このように、Kerasはもっともシンプルで理解しやすいです。

3.4. デバッグ

Kerasは単純な構造をもっているため、デバッグする必要はほとんどありませんが、Tensorflowは構造が複雑なので、デバッグを行うのはかなり困難です。それに対して、PyTorchはKerasやTensorflowと比べてデバッグの機能は格段に簡易です

具体的には、PyTorchは一般的なPythonコードのようにデバッグできます。つまり、pdb、ipdb、PycharmなどPython用のデバッグツールを利用すればよいのです。これらのツールは使用方法を勉強する時間がかからず、また任意のコードの行にBreak pointを設定することができるため、非常に便利です。

一方、Tensorflowをデバッグするためには2つの方法があります。1つ目はTensorflowのsessionから値を調べたい変数をリクエストする方法、2つ目はTensorflow debugger(tfdbg)という複雑なツールを用いる方法です。

両方とも、デバッグの手順が把握できるまで時間がかかり、モデルが大規模であればであるほど大変です。

3.5. データセット

Kerasは比較的遅いので、小規模データセットに使用されます。一方、TensorflowやPyTorchは高速な実行ができるので、大規模モデルや大規模データセットに使用されます。

3.6. 人気

データサイエンスの需要の増加につれて、深層学習の技術も著しく発達しています。そのため、3つのフレームワークはいずれも非常に高い人気を得ています。

Andrej Karpathy氏のtwitterによると具体的な人気度は指標によって異なりますが、例えばarXivで載せられた機械学習の論文で、各フレームワークについて、述べられている割合以下になります。下図の通り、Tensorflow、Keras、PyTorchの順に多く記述されていることが分かります。

Tensorflowは長らく使用されていますので、学術ではもっとも人気を得ています。また、KerasはTensorflowの後登場し、使用しやすいので学術では2番目人気となります。PyTorchは他の2つのフレームワークと比べて比較的にあたらしいので、まだポピュラーではありません。また、会社によってそれぞれのフレームワークの人気度が異なります。

TensorflowはGoogleやLinkedin、Snapchat、AMD、Bloomberg、Paypal、Qualcommなど、KerasはNvidiaやUber、Google、Amazon、Apple、Netflixなどで使用されています。一方、PyTorchは主にFacebookやWells Fargo、 Salesforce、Genentech、Microsoft、JPMorgan Chaseなどに適用されています。

3.7. まとめて比較

上記の指標を含めてまとめて比較します。

指標 Tensorflow Keras PyTorch
APIのレベル 高と低
速度 速い 遅い 速い
可読性 理解・使用しにくい シンプル、簡潔で、理解しやすい 複雑、理解しにくい
デバッグ 困難 シンプルなのでデバッグはほとんどない 簡易
データセット 大規模のデータセット 小規模データセット 大規模のデータセット
学習済みのモデルの有無
学術での人気 1番 2番 3番
言語 C++、CUDA、Python Python Lua

4. それぞれのフレームワークの用途

いくつかの場面でTensorflow、KerasとPyTorchを比較しましたが、これはあくまでもこれらのフレームワークの相違点を示すだけで、どれが優れているかという絶対的な回答はありません。どのフレームワークを利用するかは以下の要素を考慮すればよいでしょう。

  • 技術的な要件
  • 他の必要条件
  • 使いやすさ

具体的には、以下のようなシナリオで使用されます。

Tensorflow

  • 大規模データセット
  • 高いパフォーマンスを要する
  • 画像リサイズなど学習以外の様々な機能が必要となる
  • 物体検出

Keras

  • モデルの作成に時間がかからない(低レベルの工夫が少ない)
  • 小規模のデータセット
  • 複数のバックエンドのサポートがある

PyTorch

  • 柔軟性が必要(モデルの低レベルで変更可能)
  • 短期間のトレーニング
  • デバッグ機能が必要

5. おわりに

本記事では深層学習でよく使用されている3つのフレームワークであるTensorflow、Keras、PyTorchをいくつかの場面で比較してみました。

その結果、いずれも優れる点と劣るがあることがわかりました。Kerasは構造はシンプルで使いやすいですが、速度が遅く、小さいデータセットにしか適しない。Tensorflowはパフォーマンスが高いですが、構造が複雑で使いにくい。また、PyTorchは柔軟性を有するにも関わらず、まだ新しく、理解するのに時間がかかる。などです。

どの場合にどのフレームワークを使用したらよいのかはそれぞれの特徴を理解してから決定しましょう。

また、深層学習を勉強している方は遠慮なく多くのフレームワークを体験して、知識を積むことをお勧めします。

参考URL:

https://www.simplilearn.com/keras-vs-tensorflow-vs-PyTorch-article

https://realpython.com/PyTorch-vs-tensorflow/

https://deepsense.ai/keras-or-PyTorch/

https://awni.github.io/PyTorch-tensorflow/

https://wrosinski.github.io/_posts/2017-11-22-deep-learning-frameworks/

お問い合わせ先

執筆者プロフィール

Le Tron Nghia
Le Tron Nghiatdi デジタルイノベーション技術部
AIエンジニアとして就労しています。Standford大学のAndrew Ng教授によるオンライン機械学習コースの卒業証明書とTensorflow検定の資格を持っています。
主にデータ解析や画像処理などのAI案件にかかわっており、AIの知識を蓄えています。
Pocket

関連記事