このTensorFlowチュートリアルは、TensorFlowを使用してディープラーニングアルゴリズムを適用してさまざまな問題を解決することに関心のある専門家や愛好家向けに設計されています。 TensorFlowは、モデルを構築するためのデータフローグラフの概念に基づいたオープンソースのディープラーニングライブラリです。これにより、多くの層を持つ大規模なニューラルネットワークを作成できます。このライブラリの使用法を学ぶことも、 。以下は、このTensorFlowチュートリアルブログで説明されるトピックです。
- TensorFlowとは
- TensorFlowコードの基本
- TensorFlowユースケース
テンソルとは何ですか?
このTensorFlowチュートリアルでは、TensorFlowについて説明する前に、まず理解しましょう テンソルとは 。テンソルは、ディープラーニングでデータを表現するための事実上のものにすぎません。
上の画像に示されているように、テンソルは単なる多次元配列であり、より高い次元のデータを表すことができます。一般に、ディープラーニングは、次元がデータセットに存在するさまざまな特徴を参照する高次元のデータセットを扱います。実際、「TensorFlow」という名前は、ニューラルネットワークがテンソルに対して実行する操作に由来しています。文字通りテンソルの流れです。テンソルとは何かを理解したので、このTensorFlowチュートリアルを進めて、理解しましょう– TensorFlowとは何ですか?
TensorFlowとは何ですか?
TensorFlowは、ディープラーニングモデルを実装するためのさまざまなタイプの機能を提供するPythonベースのライブラリです。前に説明したように、TensorFlowという用語は2つの用語で構成されています–TensorとFlow:
TensorFlowでは、テンソルという用語は、データを多次元配列として表現することを指しますが、フローという用語は、上の画像に示すように、テンソルに対して実行する一連の操作を指します。
これで、TensorFlowに関する十分な背景について説明しました。
Javaパッケージの作成方法
次に、このTensorFlowチュートリアルでは、TensorFlowのコード基本について説明します。
TensorFlowチュートリアル:コードの基本
基本的に、TensorFlowプログラムを作成するプロセス全体には、次の2つのステップが含まれます。
- 計算グラフの作成
- 計算グラフの実行
上記の2つのステップを1つずつ説明します。
1.計算グラフの作成
そう、 計算グラフとは何ですか? 計算グラフは、グラフ内のノードとして配置された一連のTensorFlow操作です。各ノードは、入力として0個以上のテンソルを取り、出力としてテンソルを生成します。 3つのノードで構成される単純な計算グラフの例を示します– に 、 b & c 以下に示すように:
上記の計算グラフの説明:
定数ノード入力がゼロであるため定数値を格納するために使用されますが、格納された値を出力として生成します。上記の例では、aとbはそれぞれ値5と6の定数ノードです。
- ノードcは、定数ノードaにbを乗算する操作を表します。したがって、ノードcを実行すると、constノードaとbが乗算されます。
基本的に、計算グラフは、TensorFlowプログラムで行われる数学的計算を概念化する別の方法と考えることができます。計算グラフのさまざまなノードに割り当てられた操作を並行して実行できるため、計算のパフォーマンスが向上します。
ここでは、計算について説明します。何も計算せず、値を保持せず、コードで指定された操作を定義するだけです。
2.計算グラフの実行
前の計算グラフの例を取り上げて、それを実行する方法を理解しましょう。以下は、前の例のコードです。
例1:
import tensorflow as tf#グラフを作成するa = tf.constant(5.0)b = tf.constant(6.0)c = a * b
ここで、ノードcの出力を取得するには、計算グラフをa内で実行する必要があります。 セッション 。 Sessionは、グラフ操作をCPUやGPUなどのデバイスに配置し、それらを実行するためのメソッドを提供します。
セッションは、TensorFlowランタイムの制御と状態をカプセル化します。つまり、すべての操作が実行される順序に関する情報を保存し、すでに計算された操作の結果をパイプラインの次の操作に渡します。セッション内で上記の計算グラフを実行する方法を紹介します(コードの各行の説明がコメントとして追加されています)。
#セッションオブジェクトを作成しますsess = tf.Session()#セッション内でグラフを実行し、出力を変数に格納しますoutput_c = sess.run(c)#ノードcの出力を出力しますprint(output_c)#セッションを閉じます一部のリソースを解放しますsess.close()
出力: 30
つまり、これはすべてセッションとその中で計算グラフを実行することに関するものでした。ここで、TensorFlowを使用して深層学習モデルを構築する際に広範囲に使用する変数とプレースホルダーについて説明します。
定数、プレースホルダー、変数
TensorFlowでは、定数、プレースホルダー、変数を使用して、深層学習モデルのさまざまなパラメーターを表します。定数についてはすでに説明したので、プレースホルダーから始めます。
プレースホルダー:
TensorFlow定数を使用すると、値を保存できますが、実行時にノードに入力を取得させたい場合はどうでしょうか。この種の機能では、プレースホルダーが使用され、グラフが外部入力をパラメーターとして受け取ることができます。基本的に、プレースホルダーは、後でまたは実行時に値を提供することを約束します。物事を簡単にするための例を挙げましょう。
import tensorflow as tf#プレースホルダーの作成a = tf。 placeholder(tf.float32)b = tf。 placeholder(tf.float32)#乗算演算w.r.tを割り当てます。 a&ampamp b to node mul mul = a * b#セッションオブジェクトを作成しますsess = tf.Session()#aとbにそれぞれ値[1、3] [2、4]を渡してmulを実行しますoutput = sess.run( mul、{a:[1,3]、b:[2、4]})print( 'Multiplying ab:'、output)
出力: [2。 12.]
覚えておくべきポイント プレースホルダー:
- プレースホルダーは初期化されておらず、データは含まれていません。
- 実行時に考慮される入力またはフィードをプレースホルダーに提供する必要があります。
- 入力なしでプレースホルダーを実行すると、エラーが発生します。
それでは、先に進んで理解しましょう– 変数とは何ですか?
変数
ディープラーニングでは、プレースホルダーを使用して、モデルまたはグラフに任意の入力を取ります。入力を取得する以外に、グラフを変更して、新しい出力を生成できるようにする必要があります。同じ入力。このために、変数を使用します。一言で言えば、変数を使用すると、トレーニング可能なパラメータまたはノードをグラフに追加できます。つまり、値は一定期間にわたって変更できます。変数は、以下に示すように、初期値とタイプを提供することによって定義されます。
var = tf.Variable([0.4]、dtype = tf.float32)
注意:
- データ型を明示的に指定していない場合、TensorFlowは初期化された値から定数/変数の型を推測します。
- TensorFlowには、次のような独自のデータ型が多数あります。 tf.float32 、 tf.int32 等 あなたはそれらすべてを参照することができます ここに 。
呼び出すと定数が初期化されます tf.constant 、およびそれらの値は決して変更できません。逆に、呼び出したときに変数は初期化されません tf.Variable 。 TensorFlowプログラムのすべての変数を初期化するには、 しなければならない 以下に示すように、特別な操作を明示的に呼び出します。
init = tf.global_variables_initializer()sess.run(init)
グラフを初めて使用する前に、変数を初期化する必要があることを常に覚えておいてください。
注意: TensorFlow変数は、テンソルを含むメモリ内バッファーですが、グラフの実行時にのみインスタンス化され、その後すぐに削除される通常のテンソルとは異なり、変数はグラフの複数の実行にわたって存続します。
TensorFlowの基本を十分に説明したので、先に進んで、TensorFlowを使用して線形回帰モデルを実装する方法を理解しましょう。
TensorFlowを使用した線形回帰モデル
線形回帰モデルは、以下に示す線形回帰方程式を使用して、別の変数(独立変数)の既知の値から変数(従属変数)の未知の値を予測するために使用されます。
したがって、線形モデルを作成するには、次のものが必要です。
- 従属変数または出力変数(Y)
- 勾配変数(w)
- Y-切片またはバイアス(b)
- 独立変数または入力変数(X)
それでは、TensorFlowを使用して線形モデルの構築を始めましょう。
以下のボタンをクリックして、コードをコピーします。
#初期値が0.4のパラメーター勾配(W)の変数を作成するW = tf.Variable([。4]、tf.float32)#初期値が-0.4のパラメーターバイアス(b)の変数を作成するb = tf.Variable( [-0.4]、tf.float32)#入力変数または独立変数を提供するためのプレースホルダーの作成。xx= tf.placeholder(tf.float32)で表されます。#線形回帰の方程式linear_model = W * x + b#すべての変数の初期化sess = tf.Session()init = tf.global_variables_initializer()sess.run(init)#回帰モデルを実行して出力wrtを計算します提供されたx値へprint(sess.run(linear_model {x:[1、2、3、4]}))
出力:
[0. 0.40000001 0.80000007 1.20000005]
上記のコードは、回帰モデルの実装の背後にある基本的な考え方、つまり、出力w.r.tを取得するために回帰直線の方程式に従う方法を表しています。入力値のセット。ただし、完全な回帰モデルにするために、このモデルに追加する必要があるものがさらに2つあります。
- まず、与えられた入力とそれぞれの出力のセットに基づいて、モデルが自動的にトレーニングできるメカニズムを提供する必要があります。
- 次に必要なのは、トレーニング済みモデルの出力を、指定されたx値のセットに基づいて目的の出力またはターゲット出力と比較することによって検証することです。
ここで、上記の機能を回帰モデルのコードに組み込む方法を理解しましょう。
損失関数–モデルの検証
損失関数は、モデルの現在の出力が目的の出力またはターゲットの出力からどれだけ離れているかを測定します。二乗誤差の合計またはSSEと呼ばれる、線形回帰モデルで最も一般的に使用される損失関数を使用します。 SSEはw.r.tで計算されましたモデル出力(linear_modelで表されます)および目的またはターゲット出力(y)は次のとおりです。
y = tf.placeholder(tf.float32)error = linear_model-y squared_errors = tf.square(error)loss = tf.reduce_sum(squared_errors)print(sess.run(loss、{x:[1,2,3,4 ]、y:[2、4、6、8]})
出力: 90.24
ご覧のとおり、高い損失値が得られています。 したがって、受け取るエラーを減らすために、重み(W)とバイアス(b)を調整する必要があります。
tf.train API –モデルのトレーニング
TensorFlowは提供します オプティマイザ 損失関数またはエラーを最小限に抑えるために、各変数をゆっくりと変更します。最も単純なオプティマイザは 最急降下法 。それは、その変数に関する損失の導関数の大きさに応じて各変数を変更します。
#勾配降下オプティマイザーオプティマイザーのインスタンスの作成= tf.train.GradientDescentOptimizer(0.01)train = optimizer.minimize(loss)for i in range(1000):sess.run(train、{x:[1、2、3、 4]、y:[2、4、6、8]})print(sess.run([W、b]))
出力: [array([1.99999964]、dtype = float32)、array([9.86305167e-07]、dtype = float32)]
したがって、これは、TensorFlowを使用して線形モデルを作成し、目的の出力を取得するようにトレーニングする方法です。
ディープラーニングについて理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 Edureka Deep Learning with TensorFlow認定トレーニングコースは、SoftMax関数、オートエンコーダニューラルネットワーク、制限付きボルツマンマシン(RBM)などの概念に加えて、リアルタイムプロジェクトと割り当てを使用して、基本的および畳み込みニューラルネットワークのトレーニングと最適化のエキスパートになるのに役立ちます。
質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。