TensorFlowのプログラミングは、今までのPythonのプログラミングのスタイルと大きく異なる点がある。Apache SparkののScalaと同様に、分散処理、メモリの有効活用等を考慮に入れた遅延実行型のスタイルにある。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
プログラムの前半では、ひたすらにTensorのFlow Graphを描く。後半でセッションを立ち上げて、変数にデータをロードして実行する。要するにSessoin()がプログラムの実行の実体である。
セッションSession()の基本構造は、「1 + 2 = 3」の演算で表せば、以下の通り:
1 2 3 4 5 6 |
import tensorflow as tf x1 = tf.constant(1) x2 = tf.constant(2) with tf.Session() as sess: result = sess.run(x1 + x2) print(result) # Print 3 |
Pythonインタープリター風にインターラクティブなセッションの記述としたければ、InteractiveSession()が用意されているので、以下のように記述できる。
1 2 3 4 5 6 |
import tensorflow as tf x1 = tf.constant(1) x2 = tf.constant(2) result = tf.add(x1, x2) sess = tf.InteractiveSession() print(result.eval()) # Print 3 |
GraphとSessionとの関係、とくに学習をGraphで組んで、Sessionで実行させるという部分を理解する機械学習の基本部分では、たいていのアルゴリズムでは、学習データをバッチに分けて、Epoch数を繰り返すバッチ学習が適応されるが、Sessionので構造は、以下のように二重のforループ構造として記述されることとなる。
1 2 3 4 |
with tf.Session() as sess: for epoch in range(num_epochs): for batch in range(num_batches): sess.run(…) |
また、後ほどに具体的なアルゴリズムに適応してみる。