こんにちは。のっくん(@yamagablog)です。
今日の記事では、TensorFlowというライブラリを使って数値を計算するプログラムを書いてみます。
TensorFlowはディープラーニング用のライブラリですが、その前に“簡単な演算”をしてどういった仕組みで動いているのか確認したいと思います。
「TensorFlowって何だか難しそう」
「TensorFlowのコードを読んで挫折したから基本をもう一回勉強したい」
そう思っている方に読んでもらえればと思います。
目次
準備
まずはライブラリをインストールします。
pip install --upgrade tensorflow==1.5.0
ハローワールド
手始めにハローワールドをしてみましょう。
import tensorflow as tf sess = tf.Session() hello = tf.constant('HelloWorld') res = sess.run(hello) print(res)
Pythonだと1行でハローワールドできるのに、tensorflowだと5行も書かないといけないんです。(汗)
constantと言うのは定数です。セッションを開始して、runメソッドを呼び出すことでHelloWorldを出力しています。
足し算と掛け算
簡単な演算をしてみます。
import tensorflow as tf # 定数を決める a = tf.constant(10) b = tf.constant(20) c = tf.constant(30) # 演算を決める mul_op = a * ( b + c ) # セッションを開始 sess = tf.Session() res = sess.run(mul_op) print(res)
実行すると500と出力されます。
演算を定義している部分を「データフローグラフ」と言います。このグラフを実行するためにセッションを開始しています。
プレースホルダを使う
TensorFlowでよく使われるのが“プレースホルダ”と言われるものです。
これはデータフローグラフの構築時には実際に値を入れず入れ物だけを用意して置いて、セッションを実行するときに実際の値を入れる仕組みです。
入れ物(プレースホルダ)を5個用意してみます。
import tensorflow as tf # プレースホルダーを宣言 32bit整数型で要素が5つある配列 a = tf.placeholder(tf.int32,[5]) # 定数の宣言 three = tf.constant(3) # 演算の定義 x3_op = a * three sess = tf.Session() # プレースホルダーに値を割り当てて実行 res = sess.run(x3_op, feed_dict={ a:[10,20,30,40,50] }) print(res)
[30 60 90 120 150] が出力されます。
任意のサイズを指定
要素数を5で固定しましたが、Noneを使うと任意のサイズを指定できます。
import tensorflow as tf # プレースホルダーを宣言 二次元の配列で任意のサイズを指定 a = tf.placeholder(tf.int32, [None,2]) three = tf.constant(3) x3_op = a * three sess = tf.Session() list = [[1,2],[3,4],[5,6]] # プレースホルダーに値を割り当てて実行 res = sess.run(x3_op, feed_dict={ a:list }) print(res)
実行すると、listの中身が3倍された結果が得られます。
[[ 3 6] [ 9 12] [15 18]]
まとめ
・プレースホルダーを使うと実行時に値を割り当ててくれる
・プレースホルダーでは任意のサイズを指定できる
参考