第3回 TensorFlowの基本構成要素:「テンソル」と「セッション」:TensorFlow入門(2/2 ページ)
TensorFlowによる深層学習を始める前に、TensorFlowの基本的な構成要素であるテンソルとセッションを理解しておこう。TensorFlowのコード例を示しながら、できるだけコンパクトにまとめる。
セッション
第1回で「TensorFlowの基本はデータフローグラフによる演算操作である」と説明した。TensorFlowのセッションとは、構築されたデータフローグラフの演算処理を実際に行うランタイムへのクライアントのことだ。
TensorFlowのセッションは、tf.Sessionクラスとtf.InteractiveSessionクラスにより提供される。
名前の通り、対話モードやJupyter Notebookなどでインタラクティブにデータフローグラフの構築と評価を行いたい場合は、tf.InteractiveSessionを使えばよい。
バッチ処理などではtf.Sessionを使えばよい。
tf.InteractiveSessionクラスは、インタラクティブに操作するためのデフォルトセッションであるため、データフローグラフを構築する前にインスタンスを作成する必要がある(リスト5)。
一方、tf.Sessionクラスは、データフローグラフとは独立して定義できる(リスト6)。
いずれのセッションクラスのインスタンスも、最後にcloseメソッドを呼び出してリソースの解放を行うべきである。
tf.InteractiveSessionクラスは、その用途上、closeメソッドを明示的に呼ぶことになる(リスト5)。
一方、tf.Sessionクラスは、Pythonのwith構文を利用することでスコープが明示しやすくなる*4(リスト6)。
*4 tf.InteractiveSessionクラスがwith構文を利用できないというわけではない。
sess = tf.InteractiveSession()
a = tf.constant(2.0)
b = tf.constant(1.5)
mul = tf.multiply(a, b)
mul.eval()
sess.close()
セッションのインスタンス作成をグラフ作成前に行う必要がある。
a = tf.constant(2.0)
b = tf.constant(1.5)
mul = tf.multiply(a, b)
with tf.Session():
print(mul.eval())
セッションのインスタンス作成はグラフ作成と独立に記述できる。
データフローグラフを評価実行するためには、runメソッドを用いる。これまでevalメソッドを用いてきたが、evalメソッドはデータフローグラフ中の1つのノードに対する評価を行うものであることに対して、runメソッドを用いると複数のノードの演算結果を1回の評価で取得できる。
a = tf.constant(1.5)
b = tf.constant(2.0)
c = tf.constant(-1.0)
d = tf.constant(3.0)
x = tf.add(a, b)
y = tf.multiply(c, d)
z = tf.add(x, y)
with tf.Session() as sess:
result = sess.run([x, y, z])
print(result)
次回は、ディープラーニングの代表的な手法の一つ、「CNN」について説明する。
【TL;DR】TensorFlowの基本構成要素
- テンソル: データフローグラフにおける各ノードは演算を表し、その演算の入力(オペランド)と結果は「テンソル」である
- テンソルの値の定義方法: 「定数」「演算」「プレースホルダー」「変数」の4つの方法がある
- 定数: データフローグラフ中における不変な値。tf.constant関数によって作成される
- 演算: データフローグラフにおける演算の結果はテンソルなので、演算そのものが「テンソル」と見なせる。+/tf.add、tf.matmulなど多数ある
- プレースホルダー: データフローグラフの外部から与えられる値。tf.placeholder関数などによって作成され、evalメソッドなどによって値が与えられる
- 変数: データフローグラフ中で変化し得る値。tf.Variableクラスで提供される
- セッション: 構築されたデータフローグラフの演算処理を実際に行うランタイムへのクライアントのこと。tf.Sessionクラスとtf.InteractiveSessionクラスにより提供される
- tf.InteractiveSession: 対話モードなどで使う。インタラクティブに操作できるセッションで、データフローグラフ構築前にインスタンスを作成して、明示的にcloseする必要がある
- tf.Session: バッチ処理などに使う。データフローグラフとは独立に定義できるセッションで、Pythonのwith構文でスコープを明示するとよい
- データフローグラフの評価実行: 複数のノードの演算結果をまとめて取得するにはrunメソッドを用いる。個別ノード単位で取得するにはevalメソッドを用いる
Copyright© Digital Advantage Corp. All Rights Reserved.