Theano vs TensorFlow:フレームワークの簡単な比較



TheanoとTensorFlowに関するこの記事では、2つのフレームワークを簡潔かつ明確に比較し、自分に合ったフレームワークを選択するのに役立ちます。

の時代 ディープラーニング そして ピークにあります。作成します 230万 2020年までの仕事。毎月新しいフレームワークが登場することで、TensorFlowとTheanoはしばらくの間存在し、同様にかなりの人気を得ています。したがって、このTheano vs TensorFlowの記事では、次のトピックについて説明します。

テアーノとは?

Theanoは、のライブラリとして定義できます。 科学計算 。モントリオール大学によって開発され、2007年から利用可能になっています。





theano-logo

多次元配列を含む数式を効率的に定義、最適化、および評価することができます。 CPUとGPUの両方で実行できます。



TensorFlowとは何ですか?

TensorFlow は、さまざまなタスクにわたるデータフロープログラミング用のGoogleBrainによるオープンソースソフトウェアライブラリです。

これは、次のような機械学習アプリケーションに使用される記号数学ライブラリです。 。



Theano vs TensorFlow

次の指標に基づいて、TheanoとTensorFlowを比較します。

人気:

テアノ TensorFlow
古いフレームワークであるTheanoは それほど人気が​​ない の中で 、研究者。昔々TensorFlowは、 最も有名な ディープラーニングフレームワークであり、多くの研究で使用されています。

実行速度:

テアノ TensorFlow
TensorFlowよりも高速にタスクを実行します。特に、単一のGPUタスクはTheanoで非常に高速に実行されます。TensorFlowの実行速度はTheanoに比べて遅いですが、マルチGPUタスクでは主導権を握ります。

テクノロジーのメリット:

テアノ TensorFlow
幅広い操作をサポートします。

Javaで部分文字列を使用する方法

Theanoは、 エラー。

オプティマイザーをハードコーディングする必要があるため、オプティマイザーを完全に制御できます。

TensorFlowはまだTheanoと同等でなければなりません。

TensorFlowの場合はそうではありません

箱から出してすぐに多くの優れたオプティマイザーにアクセスできます。コーディングが簡単になります

互換性:

テアノ TensorFlow
Kerasの驚くべきディープラーニングライブラリはTheanoと互換性があります。それはうまく統合されます。

ネイティブWindowsをサポートしています。

また、ラザニアのような高レベルのラッパーもサポートしています。

しかし、TensorFlowの場合、まだ完全にはありません。ただし、v2.0ではこれは当てはまりません。

現在、TensorFlowにはこのサポートがありません。

ラザニアはサポートされていません。

コミュニティサポート:

テアノ TensorFlow
Theanoは、TensorFlowの前に登場したため、より大きなコミュニティサポートを提供しています。

TensorFlowよりも多くのドキュメントがあります

TensorFlowのオンラインコミュニティサポートは、その人気とともに急速に増加しています。

ドキュメントは比較的少ないです。

コードの可読性:

コードに基づいてTheanoとTensorFlowを比較してみましょう。ここでは、基本的なサンプルスクリプトを使用しています。ここでは、Phonyデータを取得し、そのデータに最適なものを初期化して、将来のデータポイントを予測できるようにします。

Javaの最良のアイデアは何ですか

Theanoコード:

import theano import theano.tensor as T import numpy#ここでも、numpyに100ポイントを作成しますx_data = numpy.float32(numpy.random.rand(2、100))y_data = numpy.dot([0.100、0.200]、x_data)+ 0.3#Theanoモデルを初期化するX = T.matrix()Y = T.vector()b = theano.shared(numpy.random.uniform(-1、1)、name = 'b')W = theano.shared( numpy.random.uniform(-1.0、1.0、(1、2))、name = 'W')y = W.dot(X)+ b#各パラメーターの平均二乗誤差の勾配WRTを計算しますcost = T.mean(T.sqr(y-Y))gradientW = T.grad(cost = cost、wrt = W)gradientB = T.grad(cost = cost、wrt = b)updates = [[W、W-gradientW * 0.5]、[b、b-gradientB * 0.5]] train = theano.function(inputs = [X、Y]、outputs = cost、updates = updates、allow_input_downcast = True)for i in xrange(0、201): train(x_data、y_data)print W.get_value()、b.get_value()

同等のTensorFlowコード:

import tensorflow as tf import numpy as np#NumPyで100個の偽のデータポイントを作成します。 x_data = np.float32(np.random.rand(2、100))#ランダム入力y_data = np.dot([0.100、0.200]、x_data)+ 0.300#線形モデルを作成します。 b = tf.Variable(tf.zeros([1]))W = tf.Variable(tf.random_uniform([1、2]、-1.0、1.0))y = tf.matmul(W、x_data)+ b#二乗誤差を最小化します。 loss = tf.reduce_mean(tf.square(y --y_data))optimizer = tf.train.GradientDescentOptimizer(0.5)train = Optimizer.minimize(loss)#変数を初期化するため。 init = tf.initialize_all_variables()#グラフを起動しますsess = tf.Session()sess.run(init)#平面をフィットします。 xrange(0、201)のステップの場合:ステップ%20 == 0の場合はsess.run(train):ステップを出力、sess.run(W)、sess.run(b)#最適な学習はW:[[0.100 0.200]]、b:[0.300]

長さワイズ 両方のコードはほとんどです 同様 大きな違いはありません。同じように生成された2つ 入力とターゲット出力を記述する配列。しかし、モデルの初期化を見てみましょう。

モデルの初期化:

#TensorFlow b = tf.Variable(tf.zeros([1]))W = tf.Variable(tf.random_uniform([1、2]、-1.0、1.0))y = tf.matmul(W、x_data)+ b#Theano X = T.matrix()Y = T.vector()b = theano.shared(numpy.random.uniform(-1、1)、name = 'b')W = theano.shared(numpy.random .uniform(-1.0、1.0、(1、2))、name = 'W')y = W.dot(X)+ b

ここでわかるように、TensorFlowはX変数とY変数の特別な処理を必要としません。一方、Theanoは、変数が次のようになっていることを確認するために追加の作業が必要です。 シンボリック入力 関数に。 bとWの定義は説明的であり、より優れています。

学習:最適化

#テンソルフロー損失= tf.reduce_mean(tf.square(y --y_data))#(1)オプティマイザー= tf.train.GradientDescentOptimizer(0.5)#(2)トレイン= optimizer.minimize(loss)#(3)#Theanoコスト= T.mean(T.sqr(y-Y))#(1)gradientW = T.grad(cost = cost、wrt = W)#(2)gradientB = T.grad(cost = cost、wrt = b) #(2)更新= [[W、W-gradientW * 0.5]、[b、b-gradientB * 0.5]]#(2)train = theano.function(inputs = [X、Y]、outputs = cost、updates =更新、allow_input_downcast = True)#(3)

(1)の場合 MSE TheanoとTensorFlowの場合はほぼ同じです。

(2)の定義 オプティマイザ TensorFlowの場合と同じように簡単でシンプルですが、Theannoは非常に長く、検証の労力を増やしますが、オプティマイザーを明確に制御することができます。

(3)の場合 トレーニング機能 コードはほぼ同じです

トレーニングボディ:

#TensorFlow init = tf.initialize_all_variables()sess = tf.Session()sess.run(init)for step in xrange(0、201):sess.run(train)#Theano for i in xrange(0、201): train(x_data、y_data)print W.get_value()、b.get_value()

トレーニングのコードはほぼ同じですが、セッションオブジェクトにグラフ実行をカプセル化することは 概念的にクリーナー テアーノより。

最終評決:Theano vs TensorFlow

結論として、両方のAPIには 同様のインターフェース 。しかし、TensorFlowは比較的 より簡単に 多くの監視およびデバッグツールを提供するため、使用してください。 Theanoが主導権を握る 使いやすさとスピード 、ただし、TensorFlowはデプロイに適しています。事務処理または ドキュメンテーション TheanoはTensorFlow以上のものであり、TensorFlowは新しい言語であるため、そもそも人々は多くのリソースを持っていません。 Keras、Lasagne、Blocksなどのオープンソースのディープライブラリは 上に構築 テアノ。

この比較で、選択するフレームワークを決定するのに十分だったと思います。 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。この認定トレーニングは、業界の要件と要求に従って、業界の専門家によってキュレーションされます。 SoftMax関数、オートエンコーダニューラルネットワーク、制限付きボルツマンマシン(RBM)などの概念を習得し、KerasやTFLearnなどのライブラリを操作します。

質問がありますか? 「TheanovsTensorFlow」のコメントセクションにその旨を記載してください。折り返しご連絡いたします。