ページ

2016年6月1日水曜日

機械学習のフレームワークTensorflowを試す 4 - データフローグラフを理解する -


前回のサンプルコードでは事前に計算する方法を定義して、
最後に実際の計算を行ってました。
これこそがデータフローグラフの形になります。
データフローはデータの流れです。ではグラフはというとデータ構造になります。

上の図のように、ノードとそのノード間を連結するエッジで構成されます。
ノードとノードの繋がり方に着目したものになります。

Tensorflowのデータフローグラフ

Tensorflowではノードを計算操作(Operation)としています。
そしてノードが扱うデータ形式が前回も出てきたテンソル(Tensor)になります。
ここで例えば、配列[3, 4, 5]の2乗した値の平均値を算出してみます。
通常のプログラムだと・・
[3, 4, 5].map { |v| v *v }.inject(:+) / 3
# => 16
上のように、全ての要素を2乗し合計したものを要素数3で割って算出しています。
これをTensorflowで計算させると・・
$ python
>>> import tensorflow as tf
>>> array = tf.constant([3,4,5])
>>> square = tf.square(array)
>>> reduce = tf.reduce_mean(square)
>>> sess = tf.Session()
>>> ret = sess.run(reduce)
>>> print(ret)
16
上の例でのノードはarraysquarereduceになります。
[3,4,5]のデータは各ノードを通り、最終的に計算された値が出力されます。

セッション

実際に計算を行う為にTensorflowではセッションを作成します。
sess = tf.Session()
runメソッドにノードを渡すことで対象のノードを計算します。
sess.run(reduce)
ちなみに上のarraysquarereduceの各ノードを実行させると・・
$ python
>>> sess = tf.Session()
>>> array = tf.constant([3,4,5])
>>> ret = sess.run(array)
>>> print(ret)
[3 4 5]
>>> square = tf.square(array)
>>> ret = sess.run(square)
>>> print(ret)
[ 9 16 25]
>>> reduce = tf.reduce_mean(square)
>>> ret = sess.run(reduce)
>>> print(ret)
16
となり、各ノード毎の計算が行なわれているのが確認できているかと思います。

0 件のコメント:

コメントを投稿