「紫禁城の戦い」 - ディープラーニング フレームワーク: Keras VS PyTorch

「紫禁城の戦い」 - ディープラーニング フレームワーク: Keras VS PyTorch

TensorFlow は、多くの科学者、エンジニア、開発者にとって主要なディープラーニング フレームワークです。 TensorFlow 1.0 は 2017 年 2 月にリリースされましたが、使用中にはあまりユーザーフレンドリーではありません。

ここ数年、Keras と PyTorch は TensorFlow よりもはるかに簡単に使用できるため、ユーザーの間でますます人気が高まっている 2 つのディープラーニング ライブラリになりました。

この記事では、Keras と PyTorch を 4 つの側面から比較します。2 つのフレームワークの長所と短所、および独自のニーズに基づいて、どちらかを選択できます。

1. Keras と PyTorch の紹介

Keras は 2015 年 3 月に初めてリリースされ、TensorFlow、CNTK、Theano、MXNet (または TensorFlow 内の tf.contrib) で実行できる高レベル API です。 Keras の際立った特徴はその使いやすさです。Keras は、すぐに使い始めて稼働させることができる最も簡単なフレームワークです。さらに、Keras を使用すると、ニューラル ネットワークを直感的に定義でき、関数 API を使用すると、ユーザーはレイヤーを関数として定義できます。

2016 年 10 月にリリースされた PyTorch は、配列式を直接処理することに重点を置いた低レベル API として Facebook AI 研究チームによって開発されました。 Keras と比較すると、PyTorch では宣言型プログラミングをそれほど行わなくても、より柔軟かつ制御性が向上します。

[[268957]]

2. Keras か PyTorch か?

ディープラーニングの実践者は、どのフレームワークを使用するかで悩むことがあり、最終的には個人の好みに帰着することがよくあります。以下では、Keras と PyTorch の比較のいくつかの側面を紹介し、これに基づいて独自の選択を行うことができます。

1. モデルを定義するためのクラスと関数

Keras は、ディープラーニング モデルを定義するための機能 API を提供します。機能 API では、ニューラル ネットワークは、次々に適用される一連の関数として定義されます。たとえば、関数定義レイヤー 1 の出力は、関数定義レイヤー 2 の入力になります。

PyTorch を使用する場合、ユーザーは Torch ライブラリの torch.nn. モジュールを拡張するクラスとしてニューラル ネットワークを設定します。 Keras と同様に、PyTorch はレイヤーをコンポーネントとしてユーザーに提供しますが、これらのレイヤーは Python クラスに属しているため、クラスの __init__() メソッドで参照され、クラスの forward() メソッドを通じて実行されます。

対照的に、PyTorch では、単純な関数呼び出しだけでなく、Python のすべてのクラス機能にアクセスできます。ネットワークの定義がより明確かつ簡潔になります。しかし、ネットワーク コードをできるだけ早く記述することが最も重要である場合は、Keras の方が使いやすいでしょう。

2. テンソルと計算グラフと標準配列

一般的なプログラマーにとって、Keras API は多くの混乱を招く詳細を隠しており、ネットワーク層の定義も非常に直感的です。したがって、開始するにはデフォルト設定で十分です。しかし、非常に高度なモデルや「ユニークな」モデルを実装したい場合は、低レベルかつ基本的な TensorFlow を深く理解する必要があります。

しかし、実際に低レベルの TensorFlow コードを詳しく調べてみると、いくつかの課題に遭遇することになります。すべての行列乗算が揃っていることを確認する必要があります。また、レイヤー出力を印刷することさえ考えないでください。ターミナルに適切な Tensor 定義が印刷されるからです。

Keras と比較すると、PyTorch はこれらの領域でより寛容な傾向があります。各レイヤーの入力と出力のサイズを理解するだけでよく、PyTorch はこれをうまく処理するので、すぐに習得できます。抽象的な計算グラフ(デバッグ時に内部を確認できないもの)を構築する必要はありません。

PyTorch のもう 1 つの利点は、その滑らかさです。Torch テンソルと Numpy 行列を切り替えることができます。しかし、開発者がカスタムの実装をする必要がある場合、TF テンソルと Numpy マトリックスの切り替えは面倒になる可能性があり、TensorFlow を完全に理解している必要があります。

実際、PyTorch の対話型操作はさらに単純で、Torch テンソル (変数オブジェクト) を Numpy に変換し、逆の操作を実行するという 2 つのステップだけが必要です。

もちろん、何か特別なことを実装する必要がなければ、TensorFlow の障害に遭遇することはないので、Keras は問題なく動作します。しかし、何かユニークなものを実装したい場合、PyTorch の方がスムーズに実行できる可能性があります。

3. モデルのトレーニング

[[268958]]

トレーニングを始める

Keras でモデルをトレーニングするのはとても簡単です。単純な .fit() だけで、モデルのトレーニングを開始できます。

PyTorch を使用してモデルをトレーニングするには、次の手順に従います。

  • 各トレーニングバッチの開始時に勾配を初期化する
  • モデルを順方向にパスする
  • バックプロパゲーションを実行する
  • 損失を計算して重みを更新する

したがって、モデルのトレーニングに関しては、PyTorch の方が面倒です。

4. CPUとGPUのモードを制御する

[[268959]]

さらなる計算能力が必要です。

tensorflow-gpu をインストールしている場合は、Keras で GPU を使用することが可能であり、デフォルトで実行されます。その後、一部の操作を CPU にオフロードしたい場合は、それを 1 行で実行できます。

しかし、PyTorch の場合、トーチ テンソルと NumPy 変数ごとに GPU を明示的に起動する必要があります。これにより、コードがさらにわかりにくくなります。また、CPU と GPU の間を行ったり来たりしてさまざまな操作を実行したい場合、間違いを起こしやすくなります。

たとえば、以前のモデルを GPU で実行するように転送するには、次の手順が必要です。

したがって、Keras はシンプルさとデフォルト設定の点で PyTorch よりも優れています。

3. Keras と PyTorch の選択に関する一般的なアドバイス

著者は一般的に初心者には Keras から始めることを推奨しています。 Keras は間違いなく最も理解しやすく使いやすいフレームワークであり、すぐに使い始めることができます。 GPU のセットアップ、抽象化コードの処理、その他の複雑なことについて心配する必要はありません。 TensorFlow コードを 1 行も変更せずに、カスタム レイヤーと損失関数を実装することもできます。

しかし、ディープ ネットワークのより細かい側面を掘り下げ始めたり、非標準のものを実装したりする場合は、PyTorch が最適なライブラリです。 PyTorch を使用するには少し余分な作業が必要ですが、速度が低下することはありません。ネットワークを迅速に実装、トレーニング、テストできるだけでなく、デバッグも簡単に行えるという利点もあります。

参考リンク: https://towardsdatascience.com/keras-vs-pytorch-for-deep-learning-a013cb63870d

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

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

<<:  オペレーティング システムのプロセス スケジューリング アルゴリズムとは何ですか?

>>:  3年間の車両インターネット無料化により、自動運転の産業化が加速

ブログ    

推薦する

...

ビッグデータ、人工知能、ロボットの血縁関係とは?

ビッグデータ、人工知能(AI)、ロボット、アルゴリズム、ディープラーニング、モノのインターネット、セ...

年末ですね!ファーウェイクラウド開発者デーと2023イノベーションサミットが成功裏に開催されました

12月20日、ファーウェイクラウド開発者デーと2023イノベーションシェアリングサミットが成功裏に開...

世界に革命を起こす5つの新興技術

急速に進化するデジタル環境において、テクノロジーは私たちの生活を変え続け、私たちが可能だと思っていた...

将来、人工知能は冷酷な大量虐殺者になるのでしょうか?

人類の将来に対する最も永続的な恐怖の一つは、人工知能が人間の制御を逃れ、人類を絶滅させる可能性がある...

医療と人工知能の相互統合が眼科治療に新たな窓を開く

目は体表にある器官の中で画像データを取得しやすい器官であり、その健康状態は人々の生活や学習に与える影...

自然言語処理のためのオープンソースツール12選

[[316192]]独自の NLP アプリケーションで使用できる 12 個のツールを見てみましょう。...

Python とディープニューラルネットワークを使用して画像を認識する方法は?

[[219378]]見れば分かります。わずか 12 行の Python コードで、独自のマシン ビ...

ビッグデータアルゴリズムにもっと積極的な役割を担わせる

近年、ビッグデータコンピューティングの継続的な発展に伴い、ユーザーを中毒に誘導したり、悪いアイデアを...

顔認識の専門家、王国天氏:人工知能、機械学習、機械視覚とは何ですか?

昨今、人工知能はますます話題になり、応用されていますが、人工知能、機械学習、マシンビジョンとは一体何...

...

食品市場における産業用ロボット、2026年までに7億4500万米ドルに達すると予想

[[433247]]包装食品の需要増加により、食品ロボット市場規模の成長が促進されると予想されます。...

AIはすでにLeetCodeを実行できる

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIを活用して都市の建物の特性を識別し、地震などの災害に対するリスクを予測する

ビッグデータダイジェスト制作出典: サイエンスデイリー編集者: ジェーン人工知能は、ビジネスから工業...