読者です 読者をやめる 読者になる 読者になる

StaticDiary

AI、iOS、Android開発関連の備忘録です

#1 TensorFlowの公式を翻訳する| 基本的な使い方(1)

TensorFlow 翻訳

基本的な使い方

TensorFlowを使うためにあなたは以下のことを理解する必要がある。

  • グラフで計算を表現する
  • Sessionsの中身でグラフを実行する
  • tensors(テンソル)としてデータを示す
  • Variablesで状態維持する
  • 任意の操作間で入出力のデータを得てフィードとフェッチを行う

 

概論

TensorFlowはグラフで計算を表現できるプログラミングシステムである。グラフの節(ノード)はops(operationsを略したもの)と呼ばれる。opはゼロかそれ以上のTensorsを取り、いくらかの計算を行い、ゼロ以上のTensorsを生成する。TensorFlowの用法において、Tensorとは多元配列型である。例えば、あなたは浮動小数点型の次元を持つ[batch, height, width, channels]の4次元の配列としてのミニバッチの画像を表すことができる。

TensorFlowグラフは計算の描画である。何かを計算するということは、グラフはSessionのなかで立ち上げられなければならない。SessionはDevicesの上にopsグラフを置く、CPUもしくはGPUといったDevicesであり、それらを実行するメソッドを提供するのだ。これらのメソッドはPythonではnumpyのndarrayオブジェクトとして、また、CやC++ではtensorflow::Tensorインスタンスとしてopsによって生成されたtensorsを返す。

 

計算グラフ

TensorFlowプログラムは通常グラフを集める構成段階から始まり、グラフ上でopsを実行するためにsessionを使う実行段階を経て構成される。

 

TensorFlowはC,C++Pythonで使うことができる。最近では、より簡単にグラフを集めるためのPythonライブラリを使い、またCやC++では利用可能でないラージセットの補助関数を提供している。

 

sessionライブラリは3つの言語において関数を備えている。

 

グラフのビルド

グラフをビルドするために、opsの定義から始めよう。constantのようなどんな入力も必要とせず、計算するために別のopsに出力を通す。

 

Pythonライブラリにおけるopコンストラクタはopsで構成された出力を表すオブジェクトを返す。これでほかのopコンストラクタからの入力を通すことができる。

 

TensorFlowのPythonライブラリはopコンストラクタがノードを加えるデフォルトのグラフを持っている。

デフォルトのグラフとは、多くのアプリケーションで動作する。

 明確に多数のグラフを維持するやり方については Graph classドキュメントを見てください。

 

import tensorflow as tf

# Create a constant op that produces a 1x2 matrix.  The op is
# added as a node to the default graph.
#
# The value returned by the constructor represents the output
# of the constant op.
matrix1
= tf.constant([[3., 3.]])

# Create another constant that produces a 2x1 matrix.
matrix2
= tf.constant([[2.],[2.]])

# Create a matmul op that takes 'matrix1' and 'matrix2' as inputs.
# The returned value, 'product', represents the result of the matrix
# multiplication.
product
= tf.matmul(matrix1, matrix2)

 今、デフォルトのグラフは三つのノードを持つ。二つはconstant opsで一つはmatmul opsである。実際に行列を増やして掛け算の結果を得るためには、Sessionでグラフを立ち上げなければならない。

Sessionにおけるグラフローンチ

グラフを作った後は、Sessionオブジェクトを作ることで立ち上げることができます。異なるグラフがコンストラクタで指定されない限り、Sessionはデフォルトのグラフを立ち上げる。完璧なAPIについては Session class を見てください。

# Launch the default graph.
sess
= tf.Session()

# To run the matmul op we call the session 'run()' method, passing 'product'
# which represents the output of the matmul op.  This indicates to the call
# that we want to get the output of the matmul op back.
#
# All inputs needed by the op are run automatically by the session.  They
# typically are run in parallel.
#
# The call 'run(product)' thus causes the execution of three ops in the
# graph: the two constants and matmul.
#
# The output of the matmul is returned in 'result' as a numpy `ndarray` object.
result
= sess.run(product)
print(result)
# ==> [[ 12.]]

# Close the Session when we're done.
sess
.close()

 Sessionsはリリースされているリソースで閉じられるべきである。より簡単にリソースを維持するためには、with構文を使う。どのSessionもblockが存在するときclose()を呼ぶcontext manegerを実装する。

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

 TensorFlowの実装はグラフの定義を利用できる計算資源(CPUやGPUといったような)全体で分配された実行操作へと翻訳する。一般に明確にはCPUかGPUを指定する必要はない。より多くの活動のためにできる限りもしあなたが持っているならば、TensorFlowは第一にGPUを使用します。

 

もしあなたが一つ以上のGPUをマシンに搭載しているなら、それらを使うために初めに明確にopsを割り当てなければならない。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)
   
...

 

Devicesは文字列で指定される。正しくサポートされるdevicesは以下のとおりである。

  • "/cpu:0": マシン上のCPU
  • "/gpu:0": マシン上のGPU
  • "/gpu:1": 二番目のGPU,番号ごとに増える

GPUとTensorFlowについてもっと多くの情報を知りたければ次のリンクを見てください Using GPUs