TensorFlow とは何ですか?使い方?導入 & Archi構造
TensorFlow の概要からこのチュートリアルを始めましょう。
TensorFlowとは何ですか?
TensorFlow は、機械学習アプリケーションを作成するためのオープンソースのエンドツーエンド プラットフォームです。データフローと微分可能プログラミングを使用して、ディープ ニューラル ネットワークのトレーニングと推論に重点を置いたさまざまなタスクを実行するシンボリック数学ライブラリです。これにより、開発者はさまざまなツール、ライブラリ、コミュニティ リソースを使用して機械学習アプリケーションを作成できます。
現在、世界で最も有名な深層学習ライブラリは Google の TensorFlow です。 Google 製品では、すべての製品で機械学習を使用して、検索エンジン、翻訳、画像のキャプション、レコメンデーションを改善しています。
TensorFlow の例
具体的な例を挙げると、Google ユーザーは AI によってより高速で洗練された検索エクスペリエンスを体験できます。 ユーザーが検索バーにキーワードを入力すると、Google は次の単語となる可能性のある単語を推奨します。
Google は、機械学習を使用して膨大なデータセットを活用し、ユーザーに最高のエクスペリエンスを提供したいと考えています。 XNUMX つの異なるグループが機械学習を使用します。
- 研究者
- データサイエンティスト
- プログラマ
全員が同じツールセットを使用して相互に連携し、効率を向上させることができます。
Google が保有しているのはデータだけではありません。 彼らは世界で最も大規模なコンピューターを持っているため、Tensor Flow は規模に合わせて構築されました。 TensorFlow は、機械学習とディープ ニューラル ネットワークの研究を加速するために Google Brain チームによって開発されたライブラリです。
複数のCPUやGPU、さらにはモバイルオペレーティングシステム上で動作するように構築されており、次のような複数の言語で複数のラッパーが用意されています。 Python, C++ or Java.
TensorFlow の歴史
数年前、ディープラーニングは、大量のデータを扱う際に他のすべての機械学習アルゴリズムを上回るパフォーマンスを発揮し始めました。Google は、これらのディープ ニューラル ネットワークを使用してサービスを改善できると考えました。
- Gmailの
- 写真
- Google検索エンジン
彼らは、と呼ばれるフレームワークを構築します。 テンソルフロー 研究者と開発者が AI モデルで共同作業できるようにします。 開発して拡張すると、多くの人が使用できるようになります。
これは 2015 年後半に初めて公開され、最初の安定バージョンは 2017 年に登場しました。Apache オープンソース ライセンスに基づくオープンソースです。 Google に何も支払うことなく、使用したり、変更したり、変更したバージョンを有償で再配布したりすることができます。
次に、この TensorFlow ディープラーニング チュートリアルでは、TensorFlow のアーキテクチャと TensorFlow の仕組みについて学習します。
TensorFlow の仕組み
TensorFlow を使用すると、データフロー グラフと構造を構築して、Tensor と呼ばれる多次元配列として入力を受け取り、グラフ内でデータがどのように移動するかを定義することができます。これにより、これらの入力に対して実行できる操作のフローチャートを構築できます。このフローチャートは、一方の端から入力され、もう一方の端から出力されます。
TensorFlow Archi構造
Tensorflow アーキテクチャは 3 つの部分で動作します。
- データの前処理
- モデルを構築する
- モデルをトレーニングして推定する
入力を多次元配列 (別名: としても知られる) として受け取るため、Tensorflow と呼ばれます。 テンソル。 ある種のものを構築できます フローチャート 入力に対して実行する操作の集合 (グラフと呼ばれます) を作成します。入力は一方の端から入力され、複数の操作から成るこのシステムを通過して、もう一方の端から出力として出てきます。
テンソルがそこに入ると、一連の演算を経て流れ、反対側から出てくるため、TensorFlow と呼ばれます。
Tensorflow はどこで実行できますか?
TensorFlow ハードウェア、および ソフトウェア要件 に分類することができます
開発フェーズ: モードをトレーニングする段階です。 トレーニングは通常、デスクトップまたはラップトップで行われます。
実行フェーズまたは推論フェーズ: トレーニングが完了すると、Tensorflow はさまざまなプラットフォームで実行できます。 で実行できます
- デスクトップの実行 Windows, macOS またはLinux
- Webサービスとしてのクラウド
- iOS などのモバイル デバイス Android
複数のマシンでトレーニングし、トレーニングされたモデルを取得したら、別のマシンで実行できます。
このモデルはCPUだけでなくGPUでもトレーニングして使用できます。GPUはもともとビデオゲーム用に設計されました。2010年後半、スタンフォード大学の研究者は、GPUが行列演算や代数演算にも非常に優れているため、この種の計算を非常に高速に実行できることを発見しました。ディープラーニングは多くの行列乗算に依存しています。TensorFlowは、C++で記述されているため、行列乗算の計算が非常に高速です。 C++実装されていますが C++TensorFlowは主に他の言語からアクセスして制御できます。 Python.
最後に、TensorFlow の重要な機能は TensorBoard です。 の テンソルボード TensorFlow が何を行っているかをグラフィカルかつ視覚的に監視できるようになります。
TensorFlow コンポーネント
テンソル
Tensorflow の名前は、そのコア フレームワークに直接由来しています。 テンソル。 Tensorflow では、すべての計算にテンソルが含まれます。 テンソルとは、 ベクトル or マトリックス あらゆる種類のデータを表す n 次元。 テンソル内のすべての値は、既知 (または部分的に既知) と同一のデータ型を保持します。 形状。 データの形状は、行列または配列の次元です。
テンソルは入力データまたは計算結果から生成されます。TensorFlowでは、すべての操作はテンソルの内部で実行されます。 グラフグラフは連続的に行われる計算の集合である。各操作は opノード そして相互につながっています。
グラフには、オペレーションとノード間の接続の概要が表示されます。ただし、値は表示されません。ノードのエッジはテンソル、つまりオペレーションにデータを入力する方法です。
グラフ
TensorFlow はグラフ フレームワークを利用します。 グラフは、トレーニング中に実行されたすべての一連の計算を収集して説明します。 グラフには多くの利点があります。
- これは複数のCPUやGPU、さらにはモバイルオペレーティングシステム上で実行するために行われた。
- グラフの移植性により、計算結果をすぐにまたは後で使用するために保存できます。グラフは将来実行するために保存できます。
- グラフ内のすべての計算は、テンソルを接続することによって行われます。
- テンソルにはノードとエッジがあります。ノードは数学演算を実行し、エンドポイントの出力を生成します。エッジはノード間の入力/出力関係を説明します。
TensorFlow が人気がある理由
TensorFlow は、誰でもアクセスできるように構築されているため、最高のライブラリです。Tensorflow ライブラリには、CNN や RNN などの大規模なディープラーニング アーキテクチャを構築するためのさまざまな API が組み込まれています。TensorFlow はグラフ計算に基づいており、開発者は Tensorboad を使用してニューラル ネットワークの構築を視覚化できます。このツールは、プログラムのデバッグに役立ちます。最後に、Tensorflow は大規模に展開できるように構築されています。CPU と GPU で実行されます。
Tensorflow は、他の深層学習フレームワークと比較して、GitHub で最大の人気を集めています。
TensorFlow Algorithms
以下は TensorFlow でサポートされているアルゴリズムです。
現在、TensorFlow 1.10 には次の API が組み込まれています。
- 線形回帰: tf.estimator.LinearRegressor
- 分類:tf.estimator.LinearClassifier
- 深層学習分類: tf.estimator.DNNClassifier
- ディープ ラーニング ワイプとディープ: tf.estimator.DNNLinearCombinedClassifier
- ブースター ツリー回帰: tf.estimator.BoostedTreesRegressor
- ブーストされたツリー分類: tf.estimator.BoostedTreesClassifier
TensorFlow での計算の仕組み
import numpy as np import tensorflow as tf
コードの最初の XNUMX 行では、tensorflow を tf としてインポートしました。 と Python、ライブラリに短い名前を使用するのが一般的です。 利点は、ライブラリを使用する必要があるときに、ライブラリの完全な名前を入力する必要がないことです。 たとえば、tensorflow を tf としてインポートし、tensorflow 関数を使用したいときに tf を呼び出すことができます。
簡単な TensorFlow の例を使用して、Tensorflow の基本的なワークフローを練習してみましょう。2 つの数値を掛け合わせる計算グラフを作成しましょう。
この例では、X_1 と X_2 を乗算します。Tensorflow は、演算を接続するノードを作成します。この例では、これは multiply と呼ばれます。グラフが決定されると、Tensorflow 計算エンジンは X_1 と X_2 を乗算します。
最後に、X_1 と X_2 の値を使用して計算グラフを実行し、乗算の結果を出力する TensorFlow セッションを実行します。
X_1 および X_2 入力ノードを定義しましょう。 Tensorflow でノードを作成するときは、どの種類のノードを作成するかを選択する必要があります。 X1 ノードと X2 ノードはプレースホルダー ノードになります。 プレースホルダーは、計算を行うたびに新しい値を割り当てます。 これらを TF ドット プレースホルダー ノードとして作成します。
ステップ 1: 変数を定義する
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
プレースホルダー ノードを作成するときは、ここで数値を追加するデータ型を渡す必要があります。浮動小数点データ型を使用できるようにするため、tf.float32 を使用します。また、このノードに名前を付ける必要があります。この名前は、モデルのグラフィカルな視覚化を表示するときに表示されます。このノードに X_1 という名前を付けるために、name というパラメーターに X_1 という値を渡します。次に、同じ方法で X_2 を定義します。X_2。
ステップ 2: 計算を定義する
multiply = tf.multiply(X_1, X_2, name = "multiply")
これで、乗算演算を実行するノードを定義できます。Tensorflow では、tf.multiply ノードを作成することでこれを実行できます。
X_1 ノードと X_2 ノードを乗算ノードに渡します。 これは、計算グラフ内のこれらのノードをリンクするように tensorflow に指示するため、x と y から値を取得して結果を乗算するように指示します。 また、乗算ノードに multiply という名前を付けましょう。 これは、単純な計算グラフの定義全体です。
ステップ3: 操作を実行する
グラフで操作を実行するには、セッションを作成する必要があります。Tensorflow では、これは tf.Session() によって行われます。セッションが作成されたので、session を呼び出して、計算グラフで操作を実行するようにセッションに要求できます。計算を実行するには、run を使用する必要があります。
追加操作を実行すると、X_1 ノードと X_2 ノードの値を取得する必要があることが分かるので、X_1 と X_2 の値も入力する必要があります。これは、feed_dict というパラメータを指定することで実行できます。X_1,2,3 には値 1、4,5,6、2 を、X_XNUMX には値 XNUMX、XNUMX、XNUMX を渡します。
print(result) で結果を出力します。 4×10、18×1、4×2には5、3、6が表示されるはずです。
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
[ 4. 10. 18.]
データを TensorFlow にロードするためのオプション
トレーニング前の最初のステップ 機械学習アルゴリズム データをロードすることです。 データをロードするには XNUMX つの一般的な方法があります。
1. データをメモリにロードする: これは最も簡単な方法です。すべてのデータを単一の配列としてメモリにロードします。 Python コード。このコード行は Tensorflow とは無関係です。
2. Tensorflow データ パイプライン: Tensorflowには、データの読み込み、操作の実行、機械学習アルゴリズムへの入力を簡単にする組み込みAPIがあります。この方法は、特に大規模なデータセットがある場合に非常に有効です。たとえば、画像レコードは巨大でメモリに収まらないことが知られています。データパイプラインはメモリを独自に管理します。
どのような解決策を使用すればよいでしょうか?
データをメモリにロードする
データセットが大きすぎない場合、つまり 10 ギガバイト未満の場合は、最初の方法を使用できます。 データはメモリに収まります。 Pandas という有名なライブラリを使用して CSV ファイルをインポートできます。 次のチュートリアルでパンダについて詳しく学びます。
Tensorflow パイプラインを使用してデータをロードする
50 番目の方法は、大規模なデータセットがある場合に最適です。 たとえば、16 ギガバイトのデータセットがあり、コンピュータのメモリが XNUMX ギガバイトしかない場合、マシンはクラッシュします。
この状況では、Tensorflow パイプラインを構築する必要があります。 パイプラインはデータをバッチまたは小さなチャンクでロードします。 各バッチはパイプラインにプッシュされ、トレーニングの準備が整います。 パイプラインの構築は、並列コンピューティングを使用できるため、優れたソリューションです。 これは、Tensorflow が複数の CPU にわたってモデルをトレーニングすることを意味します。 これにより計算が促進され、強力なニューラル ネットワークのトレーニングが可能になります。
次のチュートリアルでは、ニューラル ネットワークにデータを供給するための重要なパイプラインを構築する方法について説明します。
簡単に言うと、小規模なデータセットがある場合は、Pandas ライブラリを使用してメモリにデータをロードできます。
大規模なデータセットがあり、複数の CPU を利用したい場合は、Tensorflow パイプラインを使用した方が快適です。
TensorFlow パイプラインを作成する方法
TensorFlow パイプラインを作成する手順は次のとおりです。
前の例では、X_1 と X_2 に XNUMX つの値を手動で追加しました。 次に、Tensorflow にデータをロードする方法を見ていきます。
ステップ1) データを作成する
まず、numpy ライブラリを使用して XNUMX つのランダムな値を生成しましょう。
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
[[0.8835775 0.23766977]]
ステップ 2) プレースホルダーを作成する
前の例と同様に、X という名前のプレースホルダーを作成します。テンソルの形状を明示的に指定する必要があります。 場合に備えて、値が 1,2 つだけある配列をロードします。 形状はshape=[XNUMX]として書くことができます。
# using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
ステップ 3) データセットメソッドを定義する
次に、プレースホルダー x の値を入力できるデータセットを定義する必要があります。 tf.data.Dataset.from_tensor_slices メソッドを使用する必要があります。
dataset = tf.data.Dataset.from_tensor_slices(x)
ステップ 4) パイプラインを作成する
ステップ XNUMX では、データが流れるパイプラインを初期化する必要があります。 make_initializable_iterator を使用してイテレータを作成する必要があります。 これをイテレータと名付けます。 次に、このイテレータを呼び出して、データの次のバッチ get_next にフィードする必要があります。 このステップに get_next という名前を付けます。 この例では、XNUMX つの値のみを持つデータのバッチが XNUMX つだけあることに注意してください。
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
ステップ5) 操作を実行する
最後のステップは前の例と似ています。セッションを開始し、操作イテレータを実行します。feed_dictに生成された値を入力します。 numpy。 これら XNUMX つの値は、プレースホルダー x に設定されます。 次に、get_next を実行して結果を出力します。
with tf.Session() as sess: # feed the placeholder with data sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]
まとめ
- TensorFlow の意味: TensorFlow は近年最も有名な深層学習ライブラリです。 TensorFlow を使用する実践者は、CNN、RNN、または単純な人工ニューラル ネットワークなど、あらゆる深層学習構造を構築できます。
- TensorFlow は主に学術機関、スタートアップ企業、大企業で使用されています。Google は、Gmail、フォト、Google 検索エンジンなど、ほぼすべての Google 日常製品で TensorFlow を使用しています。
- Google Brain チームは、研究者と製品開発者の間のギャップを埋めるために TensorFlow を開発しました。2015 年に TensorFlow が公開され、急速に人気が高まっています。現在、TensorFlow は GitHub 上で最も多くのリポジトリを持つディープラーニング ライブラリです。
- Tensorflow は大規模な展開が簡単であるため、実務家は Tensorflow を使用します。クラウドまたは iOS などのモバイル デバイスで動作するように構築されています。 Android.
Tensorflow はセッションで動作します。 各セッションは、異なる計算を使用したグラフによって定義されます。 簡単な例としては、数値の乗算が挙げられます。 Tensorflow では、次の XNUMX つの手順が必要です。
- 変数を定義する
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
- 計算を定義する
multiply = tf.multiply(X_1, X_2, name = "multiply")
- 操作を実行する
with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
Tensorflow での一般的な手法の XNUMX つは、データをロードするパイプラインを作成することです。 次の XNUMX つの手順に従うと、データを TensorFLow にロードできるようになります。
- データを作成する
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
- プレースホルダーを作成する
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- データセットメソッドを定義する
dataset = tf.data.Dataset.from_tensor_slices(x)
- パイプラインを作成する
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- プログラムを実行する
with tf.Session() as sess: sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next))