TensorFlow とは何ですか?使い方?導入 & Archi構造
TensorFlow の概要からこのチュートリアルを始めましょう。
TensorFlowとは何ですか?
TensorFlow は、機械学習アプリケーションを作成するためのオープンソースのエンドツーエンド プラットフォームです。データフローと微分可能プログラミングを使用して、ディープ ニューラル ネットワークのトレーニングと推論に重点を置いたさまざまなタスクを実行するシンボリック数学ライブラリです。これにより、開発者はさまざまなツール、ライブラリ、コミュニティ リソースを使用して機械学習アプリケーションを作成できます。
現在、世界で最も有名なディープラーニングライブラリは GoogleTensorFlow の。 Google この製品は、検索エンジン、翻訳、画像キャプション、レコメンデーションなどの機能を向上させるために、すべての製品で機械学習を活用しています。
TensorFlow の例
具体的な例を挙げると、 Google AI により、ユーザーはより高速で洗練された検索体験を得ることができます。ユーザーが検索バーにキーワードを入力すると、 Google 次に使うべき単語についての提案を提供します。

Google 膨大なデータセットを活用してユーザーに最高の体験を提供するために、機械学習を利用したいと考えている。機械学習を利用するグループは3つある。
- 研究者
- データサイエンティスト
- プログラマ
全員が同じツールセットを使用して相互に連携し、効率を向上させることができます。
Google は単なるデータを持っているのではなく、世界最大のコンピュータを持っているため、TensorFlowはスケーラブルに構築されています。TensorFlowは、によって開発されたライブラリです。 Google Brain Teamは、機械学習と深層ニューラルネットワークの研究を加速させる。
複数の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 で実行されます。
Tensorflowtrac他の深層学習フレームワークと比較して、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 TensorFlowをほぼすべての分野で使用 Google 日用品を含む Gmail写真と Google 検索エンジン。
- 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))
