第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」について説明する。
Copyright© Digital Advantage Corp. All Rights Reserved.