TensorFlow と PyTorch: ディープラーニングに最適なフレームワークはどれですか?

TensorFlow と PyTorch: ディープラーニングに最適なフレームワークはどれですか?

この記事を読んでいるということは、おそらくすでにディープラーニングの旅を始めているということでしょう。この分野に詳しくない方のために説明すると、ディープラーニングは、特殊な脳のようなアーキテクチャである「人工ニューラル ネットワーク」を使用して、現実世界の問題を解決できる人間のようなコンピューターを作成します。これらのアーキテクチャの開発を支援するために、Google、Facebook、Uber などのテクノロジー大手は、Python ディープラーニング環境用の複数のフレームワークをリリースし、さまざまな種類のニューラル ネットワークの学習、構築、トレーニングを容易にしています。この記事では、2 つの一般的なフレームワークである TensorFlow と PyTorch を詳しく紹介し、比較します。

1. GoogleのTensorFlow

TensorFlow は、Google の開発者によって作成され、2015 年にリリースされたオープンソースのディープラーニング フレームワークです。公式の研究は論文「TensorFlow: 異機種分散システムにおける大規模機械学習」に掲載されました。

論文アドレス: http://download.tensorflow.org/paper/whitepaper2015.pdf

TensorFlow は現在、企業やスタートアップ企業でワークロードの自動化や新しいシステムの開発に広く利用されています。分散トレーニングのサポート、スケーラブルな生産および展開オプション、複数のデバイス (Android など) のサポートが高く評価されています。

2. FacebookのPyTorch

PyTorch は、Facebook のチームによって開発され、2017 年に GitHub でオープンソース化された最新のディープラーニング フレームワークの 1 つです。開発の詳細については、論文「PyTorch での自動微分化」を参照してください。

論文アドレス: https://openreview.net/pdf?id=BJJsrmfCZ

PyTorch は、そのシンプルさ、使いやすさ、動的な計算グラフのサポート、高いメモリ効率により、ますます人気が高まっています。これについては後で詳しく説明します。

TensorFlow と PyTorch を使って何を構築できるでしょうか?

ニューラル ネットワークは最初、手書きの数字を認識したり、カメラを使用して車のナンバープレートを識別したりするなど、単純な分類問題を解決するために使用されました。しかし、最近のフレームワークの開発と NVIDIA の高性能グラフィックス プロセッシング ユニット (GPU) の進歩により、テラバイト単位のデータでニューラル ネットワークをトレーニングし、はるかに複雑な問題を解決できるようになりました。特筆すべき成果の 1 つは、TensorFlow と PyTorch に実装された畳み込みニューラル ネットワークが、ImageNet で現在の最先端のパフォーマンスを達成したことです。トレーニングされたモデルは、オブジェクト検出、画像セマンティックセグメンテーションなどのさまざまなアプリケーションで使用できます。

ニューラル ネットワーク アーキテクチャは任意のフレームワークに基づいて実装できますが、結果は同じではありません。トレーニング プロセスには、フレームワークに密接に関連する多数のパラメーターがあります。たとえば、PyTorch でデータセットをトレーニングする場合、GPU は CUDA (C++ バックエンド) 上で実行されるため、GPU を使用してトレーニング プロセスを強化できます。 TensorFlow も GPU を使用できますが、独自の組み込み GPU アクセラレーションを使用します。したがって、モデルのトレーニングにかかる​​時間は、選択したフレームワークによって常に異なります。

1. TensorFlow 優秀プロジェクト

Magenta: 機械学習をクリエイティブ プロセスのツールとして使用することを検討しているオープン ソースの研究プロジェクト: https://magenta.tensorflow.org/

Sonnet: これは、複雑なニューラル ネットワークを構築するために使用できる TensorFlow ベースのソフトウェア ライブラリです: https://sonnet.dev/

Ludwig: これは、コードを書かずにディープラーニング モデルをトレーニングおよびテストするためのツールボックスです: https://uber.github.io/ludwig/

2. PyTorch の優れたプロジェクト

CheXNet: ディープラーニングを使用して胸部X線を分析し、放射線科医レベルの肺炎モニタリングを可能にする: https://stanfordmlgroup.github.io/projects/chexnet/

PYRO: これは、PyTorch バックエンドを備えた Python で書かれた汎用確率プログラミング言語 (PPL) です: https://pyro.ai (https://pyro.ai/)

Horizo​​n: 応用強化学習 (Applied RL) のためのプラットフォーム: https://horizo​​nrl.com (https://horizo​​nrl.com/)

これらは、TensorFlow と PyTorch 上に構築されたフレームワークとプロジェクトのほんの一部です。詳細については、TensorFlow および PyTorch の GitHub および公式 Web サイトをご覧ください。

4. PyTorchとTensorFlowの比較

PyTorch と TensorFlow の主な違いは、コードの実行方法です。どちらのフレームワークも、基本データ型テンソルで動作します。テンソルは、次の図に示すように多次元配列として考えることができます。

1. メカニズム: 動的グラフ定義と静的グラフ定義

TensorFlow フレームワークは、次の 2 つのコア ビルディング ブロックで構成されています。

  • 計算グラフと、それらのグラフをさまざまなハードウェア上で実行するためのランタイムを定義するソフトウェア ライブラリ。
  • 計算グラフには多くの利点があります (後ほど紹介します)。

計算グラフは、計算を有向グラフとして記述する抽象的な方法です。グラフは、ノード (頂点) とエッジで構成されるデータ構造であり、有向エッジによってペアで接続された頂点の集合です。

TensorFlow でコードを実行すると、計算グラフが静的に定義されます。外部とのすべての通信は、実行時に外部データに置き換えられるテンソルである tf.Sessionobject と tf.Placeholder を通じて実行されます。たとえば、次のコード スニペットを検討してください。

次の図は、TensorFlow でコードを実行する前に計算グラフが静的に生成される方法を示しています。計算グラフの主な利点は、並列化または依存関係駆動スケジューリングを実現できることです。これにより、トレーニングがより高速かつ効率的になります。

TensorFlow と同様に、PyTorch にも 2 つのコア モジュールがあります。

  • 計算グラフのオンデマンドかつ動的な構築
  • Autograd: 動的グラフ上での自動微分の実行

下の図からわかるように、特別なセッション インターフェイスやプレースホルダーなしで、実行の進行に応じてグラフが変化し、ノードが実行されます。全体的に、このフレームワークは Python 言語とより緊密に統合されており、ほとんどの場合、よりネイティブな感じがします。つまり、PyTorch はより Python 的なフレームワークですが、TensorFlow はまったく新しい言語のように感じられます。

ソフトウェアの世界では、使用するフレームワークによって大きな違いがあります。 TensorFlow は TensorFlow Fold ライブラリを使用して動的グラフを実装する方法を提供しますが、PyTorch の動的グラフは組み込まれています。

2. 分散トレーニング

PyTorch と TensorFlow の主な違いの 1 つは、データの並列性です。 PyTorch がパフォーマンスを最適化する方法は、Python のネイティブの非同期実行サポートを活用することです。 TensorFlow では、分散トレーニングを実現するために、手動でコードを記述し、特定のデバイスで実行するように各操作を微調整する必要があります。ただし、PyTorch のすべての機能を TensorFlow で再現することは可能ですが、多くの作業が必要になります。次のコード スニペットは、PyTorch を使用してモデルの分散トレーニングを実装する簡単な例を示しています。

3. 視覚化

TensorFlow はトレーニング プロセスを視覚化する上で利点があります。視覚化により、開発者はトレーニング プロセスを追跡し、より便利なデバッグが可能になります。 TensorFlow の視覚化ライブラリは TensorBoard と呼ばれます。 PyTorch 開発者は Visdom を使用しますが、Visdom が提供する機能はシンプルで制限されているため、トレーニング プロセスを視覚化する場合には TensorBoard の方が適しています。

TensorBoard の機能:

  • 損失や精度などの指標を追跡して視覚化する
  • 計算グラフ(演算とレイヤー)を視覚化する
  • 重み、バイアス、その他のテンソルのヒストグラムを時間経過とともに表示する
  • 画像、テキスト、音声データを表示する
  • TensorFlow プログラムの分析

TensorBoardでのトレーニングの視覚化

Visdomの特徴:

  • コールバックの処理
  • 図や詳細を描く
  • 経営環境

Visdomでトレーニングを視覚化する

4. 本番環境への展開

トレーニング済みのモデルを本番環境にデプロイする場合、TensorFlow が明らかに勝者です。 REST クライアント API を使用するフレームワークである TensorFlow サービングを使用して、TensorFlow にモデルを直接デプロイできます。

PyTorch では、最新の 1.0 安定バージョンで本番環境へのデプロイが少し簡単になりますが、Web 上で直接モデルをデプロイするためのフレームワークは提供されていません。バックエンド サーバーとして Flask または Django を使用する必要があります。したがって、パフォーマンスを考慮する場合は、TensorFlow サービングの方が適している可能性があります。

5. PyTorchとTensorFlowを使用してシンプルなニューラルネットワークを定義する

PyTorch と TensorFlow でニューラル ネットワークを宣言する方法を比較してみましょう。

PyTorch では、ニューラル ネットワークはクラスであり、torch.nn パッケージを使用してアーキテクチャを構築するために必要なレイヤーをインポートできます。すべてのレイヤーは最初に __init__() メソッドで宣言され、次に forward() メソッドは入力 x がネットワークのすべてのレイヤーをどのように通過するかを定義します。最後に、変数モデルを宣言し、定義されたアーキテクチャに割り当てます ( model = NeuralNet() )。

最近、Keras は TensorFlow をバックエンドとして使用するニューラル ネットワーク フレームワークである TensorFlow ライブラリに統合されました。その時点から、TensorFlow でレイヤーを宣言するための構文は Keras の構文と似ています。まず、変数を宣言し、宣言するスキーマのタイプ (この場合は Sequential() スキーマ) に割り当てます。

次に、model.add() メソッドを使用して、レイヤーを順番に直接追加します。次のコード スニペットに示すように、レイヤー タイプは tf.layers からインポートできます。

5. TensorFlow と PyTorch の長所と短所

TensorFlow と PyTorch にはそれぞれ長所と短所があります。

TensorFlow の利点:

  • シンプルな組み込みの高レベルAPI
  • TensorBoard によるトレーニングの視覚化
  • TensorFlow による簡単な本番環境への導入
  • 簡単なモバイルプラットフォームのサポート
  • オープンソース
  • 優れたドキュメントとコミュニティサポート

TensorFlow の欠点:

  • 静止画像
  • デバッグ方法
  • すぐに変更するのが難しい

PyTorchの利点

  • Pythonのようなコード
  • ダイナミックなグラフィック
  • 簡単かつ高速な編集
  • 優れたドキュメントとコミュニティサポート
  • オープンソース
  • 多くのプロジェクトでPyTorchが使用されています

PyTorch の欠点:

  • 可視化には第三者が必要
  • 本番環境の導入にはAPIサーバーが必要

6. PyTorchとTensorFlowのインストール、バージョン、アップデート

PyTorch と TensorFlow はどちらも最近、新しいバージョン、PyTorch 1.0 (最初の安定バージョン) と TensorFlow 2.0 (ベータ バージョン) をリリースしました。どちらのバージョンにも、トレーニング プロセスをより効率的、スムーズ、強力にするためのメジャー アップデートと新機能が追加されています。

これらのフレームワークの最新バージョンをマシンにインストールする場合は、ソースからビルドするか、pip 経由でインストールできます。

1. PyTorchのインストール

macOS と Linux

  1. pip3 インストール torch torchvision

ウィンドウズ

  1. pip3 インストール https://download.pytorch.org/whl/cu90/torch-1.1.0-cp36-cp36m-win_amd64.whl
  2. pip3 インストール https://download.pytorch.org/whl/cu90/torchvision-0.3.0-cp36-cp36m-win_amd64.whl

2. TensorFlowのインストール

macOS、Linux、Windows

  1. # CPUのみの現在の安定リリース
  2. pip テンソルフローをインストール
  3. # TensorFlow 2.0 ベータ版をインストール
  4. pip でtensorflow ==2.0.0-beta1をインストールします

インストールが成功したかどうかを確認するには、コマンド プロンプトまたはターミナルを使用して次の手順に従います。

7. TensorFlow と PyTorch のどちらがおすすめか

TensorFlow は、強力な視覚化機能と高度なモデル開発のための複数のオプションを備えた、非常に強力で成熟したディープラーニング ライブラリです。本番環境への導入オプションがあり、モバイル プラットフォームをサポートしています。一方、PyTorch フレームワークはまだ新しく、コミュニティの活動が活発で、Python と親和性があります。

AI 関連製品をより速く開発・構築したいのであれば、TensorFlow がよい選択肢であると私は提案します。 PyTorch は高速かつ動的なトレーニングをサポートしているため、研究開発者に推奨されます。

オリジナルリンク: https://builtin.com/data-science/pytorch-vs-tensorflow

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  AI による顔を変える動画が何百万人ものユーザーを獲得。たった 1 ステップで楽しさから恐怖感まで

>>:  認知知能を業界の奥深くまで導くWAIC Baiduが言語と知識技術の完全なレイアウトを公開

ブログ    

推薦する

今後 10 年間で 21 の新しい仕事が生まれます。あなたに何ができるか見てみましょう。

[[242467]]現在観察できるマクロ経済、政治、人口、社会、文化、ビジネス、テクノロジーの一般...

...

...

2020年のディープラーニングに必要なGPUは?48Gのビデオメモリが推奨

ご存知のとおり、現在業界で最も強力な (SOTA) ディープラーニング モデルは、膨大な量のビデオ ...

企業が人工知能を活用してサービスをパーソナライズする方法

パーソナライズされたサービスが大きなメリットをもたらすことは間違いありません。うまく行けば、投資収益...

...

見逃せない AIOps 実装の重要なポイントを解説するガイド

[[280530]] [51CTO.com クイック翻訳] システムの効率性と複雑さが増すにつれて、...

...

...

...

スマートホームは私たちを監視しているのでしょうか?

スマートテクノロジーをどのように活用するのでしょうか?ほとんどのテクノロジー製品は、特にワイヤレス接...

...

AIは追いつこうと努力しているが、5Gはカーブで追い越しつつある。トランプ氏が不安にならないわけがない。

[[263771]] 5Gの進歩に伴い、コスト面でも速度面でも、中国の5Gなしでは5Gを推進するの...

...