TensorFlowは機械学習のための数値計算ライブラリです。
TensorFlowは非常の高度な機械学習を行うことができますが、使用方法がすこし難しいです。
そこで今回TensorFlowの基本的なプログラミングの流れを調べました。
使用環境
使用しているTensorFlow等のヴァージョンを以下に示します。
種類 | Version |
Python | 3.6 |
TensorFlow with GPU support | 1.8.0 |
Define and Run
TensorFlow を用いたプログラミングは、 Define and Runで行われます。
このDefine and Runの反対に当たるのがDefine by Run です。
普通にPython等でプログラミングを行っている場合は、Define by Run でプログラミングを行います。
具体的な例を挙げます。まずDefine by Runの例です。
1 2 3 |
a = 10 b = 5 c = a + b |
この例では変数a に10を、b に5を代入し、c に a + b の結果を代入しています。
一方で Define and Runの場合は下記のようになります。
1 2 3 4 |
a = tf.Variable(10) b = tf.Variable(5) c = tf.add(a,b) |
tf.Variable() は変数を、 tf.add(a,b) は変数aとbを足す演算です。
上記の例の場合、c には a + b の結果が格納されているわけではなく、 tf.add(a,b) を行うという情報が格納されているだけです。
Define and Run ではこのあと明示的に c を実行しなければなりません。
プログラミングの流れ
TensorFlowでのプログラミングは次のような流れで行われます。
- 推論・学習に用いるデータセットを用意する。
- 変数とplaceholderの設定
- ハイパーパラメータの設定
- モデル(ネットワーク)の定義
- 損失関数の設定
- モデルの初期化
- 学習
- 評価
- ハイパーパラメータの再設定
TensorFlowではまず画像や数値等のデータセットを用意します。これがなければ推論も学習もできません。また教師あり学習を行う場合には学習に使用する教師データも用意する必要があります。
TensorFlowで使用する変数は tf.Variable() や tf.placeholder() で設定します。placeholderはデータを入力するための入れ物で、実際に計算が実行されるときに値を入れます。そのため定義の段階ではデータは未定です。
ハイパーパラメータとは学習率や学習回数などの、人が考え事前に与えておくパラメータのことです。このハイパーパラメータは学習に非常に重要で、一度学習したあとパラメータを調整し再度学習を行いより良い結果を目指します。
単純な例
TensorFlowによる簡単な計算の例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import tensorflow as tf a = tf.constant(10) b = tf.Variable(5) c = tf.add(a,b) init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) print(a) print(b) print(c) print(sess.run(c)) |
実行結果を示します。
1 2 3 4 |
Tensor("Const:0", shape=(), dtype=int32) #print(a) <tf.Variable 'Variable:0' shape=() dtype=int32_ref> #print(b) Tensor("Add:0", shape=(), dtype=int32) #print(c) 15 #print(sees.run(c)) |
このプログラムは次のような動作を行っています。
- TensorFlowの計算ではまず初めに変数・定数の定義を行っています。(3~4行目)
- その後計算モデルの設定を行います。(6行目)今回は単純に定数aと変数bを足し合わせます。
- 8行目では変数の初期化の設定を行います。初期化を行わないとエラーが出ます。 tf.global_variables_initializer() ではすべての変数を一括で初期化できます。
- tf.Session() から実際に計算を行っていきます。 tf.Session() は計算実行の管理を行っている関数です。
- sess.run() で実際の計算を実行していきます。
まとめ
- TensorFlowのプログラミングはDefine and Runで行っていく。
- Define and Run で計算を記述してもその場で実行するのではなく、後で明示的に実行する必要がある。
関連記事