TensorFlow、なぜPythonが選ばれた言語なのですか?


143

最近、ディープラーニングやその他のML手法の研究を開始し、ネットの構築とトレーニングのプロセスを簡略化するフレームワークの検索を開始したところ、TensorFlowはフィールドでの経験がほとんどないことがわかりました。ディープラーニングを使用する場合に大きなMLシステムをさらに作成するための大きな要因、それでTensorFlowを作成するためになぜpythonがGoogleによって選ばれたのですか?コンパイルして解釈できない言語で作成した方がいいのではないでしょうか。

機械学習でC ++などの言語よりもPythonを使用する利点は何ですか?


2
マイナーなヒント:コンパイルと解釈は逆ではありません。さらに、任意のプログラミング言語は、コンパイラーまたはインタープリター、あるいはその両方で実装できます。ソフトウェアエンジニアリングの違いについて良い答えがあります。
8ビットツリー

回答:


240

TensorFlowについて理解する最も重要なことは、コアがPythonで書かれていないことです。コアは高度に最適化されたC ++とCUDA(NvidiaのGPUプログラミング言語)の組み合わせで書かれています。多くのことが起こるのは、順番に、使用して固有(高機能C ++およびCUDA数値計算ライブラリ)とNVIDIAのcuDNN(のために非常に最適化されたDNNライブラリNVidiaのGPUのような機能のために、コンボリューションを)。

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のパフォーマンスはそれほど重要ではないので、自然な適合でした。また、NumPyを使用すると、Pythonでの前処理を簡単に(しかも高性能で)実行できるため、TensorFlowにフィードしてからCPUを大量に使用することが容易になります。

また、モデルの実行時に使用されないモデルの表現には、複雑な要素があります-形状推論(たとえば、matmul(A、B)を実行した場合、結果のデータの形状は何ですか?)および自動勾配計算。Pythonでそれらを表現できるのは素晴らしいことでしたが、長期的には他の言語を追加しやすくするためにC ++バックエンドに移行するでしょう。

(もちろん、モデルを作成および表現するために将来的に他の言語をサポートすることを望んでいます。他のいくつかの言語を使用して推論を実行することはすでに非常に簡単です。C++は現在機能しています。Facebookの誰かがGoバインディングを提供しており、現在検討中です、など)


1
It's already quite straightforward to run inference using several other languagesPrologプログラマーとしての「推論」をどのように定義していますか?それは場違いな言葉のようです。
Guy Coder

1
モデルのフォワードパスのみを実行します。データとトレーニングの比較。
dga 2016

形状推論に関して。私はいくつかのニューラルネットワークを、学習目的でのみ静的に型付けされた言語に変換しています。PtyhonでのDuckの型付けは、コードのその部分を記述しやすくします。実を言うと、型なしでPythonコードを記述すると、Ptyhonを学習して実行前に型を取得することがはるかに難しくなります。Ptyhonを使用すると、F#である他の言語よりも多くのランタイムエラーが発生します。ダックが答えを入力していることに注目する価値があるかもしれません。
Guy Coder

2
それは事実ですが、Pythonのタイピングは間接的な理由だったと思います。Googleで一般的に使用されている言語---quora.com/…--- Pythonは、平均的な機械学習の博士号に最適です。他の唯一の本当の選択はC ++でした(Torchが使用する言語であるLuaを使用する多くの人を知りません)。C++はMLツールボックスの快適ゾーンからかなり離れています。多くのMLの人々はMatlabの出身で、派手な人気がますます人気を博しています。もちろん、ダックタイピングはおそらく根底にありますが、それは私の範囲を超えています。
dga

ありがとう、素晴らしい要約。Guy Coder ---演劇における「推論」の意味については、統計推論に関するウィキペディアの記事を参照してください。これは、Prologによって実行される演繹的なタイプとは対照的に、帰納的な推論です。
ボブカーペンター

35

TFはpythonで書かれていません。これはC ++で書かれており(高性能の数値ライブラリCUDAコードを使用しています)、githubを見てこれを確認できます。したがって、コアはpythonではなく書かれていますが、TFは他の多くの言語(python、C ++、Java、Go)へのインターフェースを提供します

ここに画像の説明を入力してください

データ分析の世界から来た場合は、numpy(Pythonで書かれていないが、Pythonへのインターフェースを提供する)のように考えることができます。または、Web開発者の場合は、データベース(PostgreSQL、MySQL、 Java、Python、PHPから呼び出すことができます)


Pythonフロントエンド(TFでモデルを作成する言語)は、多くの 理由により最も人気があります。私の意見では、主な理由は歴史的なものです。MLユーザーの大多数はすでにそれを使用しているため(別の一般的な選択肢はRです)、Pythonへのインターフェースを提供しない場合、ライブラリはおそらく不明瞭になる運命にあります。


しかし、Pythonで記述されていても、モデルがPythonで実行されるわけではありません。逆に、TFグラフの評価中にPythonが実行されない正しい方法でモデルを記述した場合デバッグ用に存在し、実際にモデルで実行されるため、実際のモデルでは避ける必要があるtf.py_func()を除きます Pythonの側)。

これは、たとえばnumpyとは異なります。たとえば、np.linalg.eig(np.matmul(A, np.transpose(A))(これがeig(AA'))の場合、演算は高速言語(C ++またはfortran)で転置を計算し、それをpythonに返し、それをpythonからAと一緒に受け取り、いくつかの高速言語で乗算を計算して、 python、次に固有値を計算してそれをpythonに返します。それでも、matmulやeigなどの高価な演算は効率的に計算されますが、結果をpythonに戻して強制することで、時間を失うことになります。TFはそれを行いません。いったんグラフを定義すると、テンソルフローはPythonではなくC ++ / CUDA /何か他のもので流れます。


このコンテキストでは、私のブログ投稿に興味があるかもしれません:blog.ephorie.de/why-r-for-data-science-and-not-python
vonjd

4

Pythonを使用すると、CおよびC ++を使用して拡張モジュールを作成し、ネイティブコードとやり取りして、Pythonの利点を引き出すことができます。

はい、TensorFlowはPythonを使用しますが、大量のC ++も含まれています

これにより、Pythonで人間が考えるオーバーヘッドが少ない実験のためのよりシンプルなインターフェースが可能になり、C ++で最も重要な部分をプログラミングすることによってパフォーマンスが追加されます。


0

ここから確認できる最新の比率は、TensorFlow C ++がコードの約50%を占め、Pythonがコードの約40%を占めることを示しています。

C ++とPythonの両方がGoogleの公式言語であるため、これがなぜそうなのかは不思議ではありません。C ++とPythonが存在する場所で高速回帰を提供する必要がある場合...

C ++は計算代数の内部にあり、Pythonはテストを含む他のすべてのものに使用されます。今日のテストがいかにユビキタスであるかを知っているので、PythonコードがTFにそれほど多く貢献しているのも不思議ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.