【Python】TensorFlow入門

 

こんにちは。のっくん(@yamagablog)です。

 

今日の記事では、TensorFlowというライブラリを使って数値を計算するプログラムを書いてみます。

 

TensorFlowはディープラーニング用のライブラリですが、その前に“簡単な演算”をしてどういった仕組みで動いているのか確認したいと思います。

 

「TensorFlowって何だか難しそう」

 

「TensorFlowのコードを読んで挫折したから基本をもう一回勉強したい

 

そう思っている方に読んでもらえればと思います。

 

[toc]

 

準備

 

まずはライブラリをインストールします。

 

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]]

 

まとめ

 

今日のまとめ
・TensorFlowではデータフローグラフを作ってセッションを走らせて実行する
・プレースホルダーを使うと実行時に値を割り当ててくれる
・プレースホルダーでは任意のサイズを指定できる

 

参考

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog