TensorFlowの研究ノート(4) - 入門 - 基本的な使用

チュートリアル住所:TensorFlow中国のコミュニティ

基本的な使用

使用TensorFlowは、あなたがTensorFlowを理解する必要があります。

  • コンピューティングタスクを表す図(グラフ)。
  • 呼び出さで  会话 (Session) で実行されるコンテキスト(文脈)。
  • データのテンソル表現を使用してください。
  • することで  变量 (Variable) 状態を維持します。
  • 任意の(任意の操作)を割り当てることができ、またはデータそこを得るために、フィードを使用して操作をフェッチ。

概要

TensorFlowプログラミングシステムは、コンピューティングタスクを図を表すために使用されている。ノードグラフで呼び出される  OP  (操作の略称)。OPが0以上を得る  Tensor、より多くの計算、農産物0またはを行う  Tensor。各テンソル多次元配列の種類がある。たとえば、グループ画像は、浮動小数点数の4次元配列として表される設定することができ、これら四つの次元です  [batch, height, width, channels]

A TensorFlow図は説明計算するための演算処理を、図なければならない  会话 で開始する。  会话 このようなCPU又はGPUのように、図OPの分布  设备 に、OPの実行するための方法を提供する。これらの方法は、実行、結果テンソルが返されたPython言語テンソル、中に戻る。  numpyの ndarray  オブジェクト; CおよびC ++言語では、テンソルが返されるtensorflow::Tensor インスタンス。

図・コンピューティング

TensorFlowプログラムは、一般的に編成され、位相およびビルドの実行フェーズ

  • ビルドフェーズの間、OPステップは、図のように記載されています。
  • 実行フェーズでは、セッションの実行を使用すると、オペアンプの数字。

例えば、通常、表現するビルドフェーズでグラフを作成し、ニューラルネットワークを訓練して、繰り返し実施段階の間にオペアンプの数字を訓練実行します。

TensorFlowは、C、C ++、Pythonのプログラミング言語をサポートしています。現在、TensorFlow Pythonライブラリを簡単に使用する、それはグラフを構築する作業を簡素化するために補助的な機能の数を提供し、これらの関数は、CおよびC ++ライブラリでサポートされていません。

トライリンガルライブラリーセッション(セッションライブラリ)は同じです。

建設ダイアグラム

建物内の図の最初のステップは、ソースOP(ソースOP)を作成することである。なし入力OPソース、例えば  常量 (Constant)ソースがオペアンプOPの出力に伝達され、他の操作を行います。

Pythonのライブラリは、OPコンストラクタがオペアンプの出力を表す値を返すように構成され、戻り値が入力として構成された他のOPに渡すことができます。

TensorFlow Pythonライブラリがあり、デフォルトチャート(グラフのデフォルト)、OPコンストラクタは、そのノードを増やすことができます。多くのプログラムのデフォルトのグラフ十分なされています。読む  グラフクラス  の複数のマップを管理する方法を学ぶためのドキュメント。

import tensorflow as tf

# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点
# 加到默认图中.
#
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])

# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])

# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)

デフォルトのマップは現在、3つのノード、2個の持ち  constant() オペアンプ、およびmatmul() オペアンプを。本当に行列の乗算の結果であること、および行列の乗算を得るために、あなたは、この図では、セッションを開始する必要があります。

セッションでは、図を開始します。

建設段階の完了後、描画を開始する。最初のステップは、ブートチャートを作成することで  Session 、オブジェクトをパラメータなしで作成した場合、セッションはデフォルトコンストラクタマップを開始します。

完全なセッションAPIについては、お読みくださいSessionクラスを

# 启动默认图.
sess = tf.Session()

# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数. 
# 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回
# 矩阵乘法 op 的输出.
#
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
# 
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
#
# 返回值 'result' 是一个 numpy `ndarray` 对象.
result = sess.run(product)
print result
# ==> [[ 12.]]

# 任务完成, 关闭会话.
sess.close()

Session オブジェクトの必要性がリソースを解放するために、使用後に閉じられる。近くの明示的な呼び出しに加えて、使用することができ、コードのブロック「と」自動的に運転を停止します。

with tf.Session() as sess:
  result = sess.run([product])
  print result

実現において、TensorFlowは、利用可能なコンピューティングリソース(例えば、CPUやGPU)をフルに活用するために、グラフィック定義分散実行時に変換される。通常、あなたが明示的にCPUまたは自動的に検出GPU、TensorFlowを指定する必要はありません。検出された場合GPUは、TensorFlowは、操作を実行するためにできる限り見つけるために、最初のGPUを使用します。

複数のGPUがマシンに使用可能である場合、最初のデフォルト以外のGPUは計算に関与していない。これらのTensorFlow GPUを使用するためには、明示的に割り当てられたオペアンプを実行する必要があります。  with...Device ステートメントを割り当て、特定のCPUに使用されていますか、 GPUは、操作を行います。

with tf.Session() as sess:
  with tf.device("/gpu:1"):
    matrix1 = tf.constant([[3., 3.]])
    matrix2 = tf.constant([[2.],[2.]])
    product = tf.matmul(matrix1, matrix2)
    ...

デバイス識別文字列は、現在サポートされているデバイスが含まれます:

  • "/cpu:0":CPUマシン。
  • "/gpu:0":マシンの最初のGPU、もしあれば。
  • "/gpu:1":マシンのセカンドGPU、そして上のようにします。

読むGPUの使用の詳細TensorFlow GPU用のセクションを。

インタラクティブ使用

Pythonサンプル文書セッションを使用して  Session マップを開始するために、及び呼び出し  Session.run() 操作を実行する方法。

など、使いやすさについては、  IPython  Pythonのインタラクティブな環境のような、それを使用することができる  InteractiveSession のではなく  Session 、カテゴリの使用  Tensor.eval() および  Operation.run() 方法の場所を  Session.run()。これは、セッションを保持する変数の使用を避けます。

# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf
sess = tf.InteractiveSession()

x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])

# 使用初始化器 initializer op 的 run() 方法初始化 'x' 
x.initializer.run()

# 增加一个减法 subtract op, 从 'x' 减去 'a'. 运行减法 op, 输出结果 
sub = tf.subtract(x, a)
print sub.eval()
# ==> [-2. -1.]

テンソル

TensorFlowテンソルプログラムが使用するデータ構造は、あなたがTensorFlowテンソルAランクテンソルのn次元アレイ又はリストとみなすことができる。テンソルの間、全てのデータ転送動作を数値を計算するためにすべてのデータを表す静的型を含み、そしてします形状。TensorFlowは、これらの概念に対処する方法を学びたい、見  ランク、形状、およびタイプ

変数

変数の  詳細について。変数は、次の例では、単純なカウンターを達成するために、変数を使用する方法を示します。実行する描画処理における状態情報を保持する表示する  変数の  詳細については、セクションを。

# 创建一个变量, 初始化为标量 0.
state = tf.Variable(0, name="counter")

# 创建一个 op, 其作用是使 state 增加 1

one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)

# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
# 首先必须增加一个`初始化` op 到图中.
init_op = tf.initialize_all_variables()

# 启动图, 运行 op
with tf.Session() as sess:
  # 运行 'init' op
  sess.run(init_op)
  # 打印 'state' 的初始值
  print sess.run(state)
  # 运行 op, 更新 'state', 并打印 'state'
  for _ in range(3):
    sess.run(update)
    print sess.run(state)

# 输出:

# 0
# 1
# 2
# 3

コード  assign() 操作のように描か表現マップの一部である  add() 同じ。だから、コールを操作する  run() 式を実行する前に、それは実際に割り当てを実行しません。

通常、統計モデルパラメータは変数の集合として表現されます。たとえば、変数のストレージとして、このテンソルを更新し、繰り返しトレーニングマップを実行することにより、トレーニングプロセスではテンソルで、ニューラルネットワークの重みを右することができます。

フェッチ

出力動作の内容を取得するには、使用できる  Session オブジェクトを  run() 使用すると、テンソルの一部を渡し、実行を呼び出すとき、テンソルは、前の例では、我々は唯一の単一のノードを取得。あなたは結果を取得するのに役立ちます  stateが、あなたはすることもできます複数のテンソルを取得します:

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)

with tf.Session():
  result = sess.run([mul, intermed])
  print result

# 输出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]

より多くの価値を取得し、単一のOPでの実行(というより取得テンソルに一つずつ)で一緒に取得するためのテンソル必要。

フィード

上記実施例は、記憶された定数または変数の形で、テンソルの図の計算に導入される。TensorFlowもAに直接操作を描画するためのパッチを提出することができるテンソルの次の一時的置換の数字のいずれかとすることができる供給機構を、提供しますテンソル。

一時的な交換作業の出力のテンソル値を使用して。あなたはとしてフィードデータを提供することができますフィード  run() コールのパラメータのみ、そのメソッドを呼び出す効果的な方法は終了内のフィードを、フィードが表示されなくなります。最も一般的な使用例は、いくつかの特別なのです動作は「フィード」操作として指定され、標識の方法は、(tf.placeholderを使用することである)これらの操作のためのプレースホルダを作成します。


input1 = tf.placeholder(tf.types.float32)
input2 = tf.placeholder(tf.types.float32)
output = tf.mul(input1, input2)

with tf.Session() as sess:
  print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

# 输出:
# [array([ 14.], dtype=float32)]

フィードの大規模、例えば 。 なし適切な供給場合、  placeholder() 操作はエラーを生成することになる。  MNIST完全に接続された給電コース  (ソースコード)が大きく飼料の使用例を与えます。

公開された47元の記事 ウォンの賞賛121 ビュー680 000 +

おすすめ

転載: blog.csdn.net/guoyunfei123/article/details/82762331