1. ホーム
  2. python

[解決済み] TensorFlow、なぜpythonが選ばれたのか?

2022-04-24 07:54:12

質問

最近、深層学習や他のML技術を勉強し始め、ネットの構築やトレーニングのプロセスを簡素化するフレームワークを探し始めたところ、TensorFlowを見つけました。インタープリタではなく、コンパイル可能な言語で作った方が良いのでは?

機械学習にC++のような言語ではなく、Pythonを使うメリットは何でしょうか。

どのように解決するのですか?

TensorFlowで最も重要なことは、ほとんどの場合、そのことを認識することです。 コアはPythonで書かれていない : 高度に最適化されたC++とCUDA(NvidiaのGPUプログラミング用言語)の組み合わせで書かれているのです。 その多くは、順番に、以下を使用することで実現されています。 アイゲン (高性能なC++およびCUDA数値計算ライブラリ)および NVidiaのcuDNN (のために非常に最適化されたDNNライブラリ)。 NVidia GPUs などの機能に対して コンボリューション ).

TensorFlowのモデルは、プログラマが"ある言語"(ほとんどの場合Python!)を使用してモデルを表現することです。 このモデルは、以下のようなTensorFlowの構成要素で書かれています。

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

は、Pythonが実行されたときに実際に実行されるわけではありません。 その代わり、実際に作成されるのは データフローグラフ には、特定の入力を受け取り、特定の操作を適用し、その結果を他の操作の入力として提供する、というようなことが書かれています。 このモデルは高速なC++コードによって実行され、ほとんどの場合、操作間のデータはPythonコードにコピーバックされることはありません。 .

そして、プログラマーは、学習用には通常Python、サービス用にはPython、時には生のC++で、ノードをプルすることによってこのモデルの実行をドライブするのです。

sess.run(eval_results)

この1つのPython(またはC++の関数呼び出し)は、C++へのプロセス内呼び出しか、または RPC 分散版では、C++のTensorFlowサーバに呼び出して実行を指示し、その結果をコピーバックする。

では、それを踏まえて、質問を言い直そう。 なぜTensorFlowは、モデルの学習を表現し、制御するために、最初によくサポートされた言語としてPythonを選んだのでしょうか?

その答えは簡単です。 Pythonはおそらく その データサイエンティストや機械学習の専門家にとって最も使いやすい言語で、C++のバックエンドと簡単に統合でき、Googleの社内外で広く使われており、オープンソースであること。 TensorFlowの基本モデルでは、Pythonの性能はそれほど重要ではないので、自然にフィットしたのです。 また、以下の点も大きなプラスです。 ナムパイ TensorFlowでCPUに負荷のかかる処理をする前に、Pythonで簡単に前処理をすることができます。

また、モデルの表現には、実行時には使われない複雑な部分がたくさんあります。形状推論(例えば、matmul(A, B)を実行したら、結果のデータの形状はどうなるのか)や自動的な グラデーション を計算します。 Pythonでそれらを表現できたのはよかったと思いますが、長期的には、他の言語を簡単に追加できるように、C++のバックエンドに移行すると思います。

(もちろん、将来的には他の言語にも対応し、モデルを作成・表現できるようにしたいと考えています)。 すでに他のいくつかの言語を使って推論を実行することは非常に簡単です -- 今はC++が使えますし、Facebookの誰かが 行く バインディングをレビューしているところです。)