前回のサンプルコードでは事前に計算する方法を定義して、
最後に実際の計算を行ってました。
最後に実際の計算を行ってました。
これこそがデータフローグラフの形になります。
データフロー
はデータの流れです。ではグラフはというとデータ構造になります。
上の図のように、ノードとそのノード間を連結するエッジで構成されます。
ノードとノードの繋がり方に着目したものになります。
ノードとノードの繋がり方に着目したものになります。
Tensorflowのデータフローグラフ
Tensorflowではノードを計算操作(Operation)としています。
そしてノードが扱うデータ形式が前回も出てきたテンソル(Tensor)になります。
そしてノードが扱うデータ形式が前回も出てきたテンソル(Tensor)になります。
ここで例えば、配列
通常のプログラムだと・・
[3, 4, 5]
の2乗した値の平均値を算出してみます。通常のプログラムだと・・
[3, 4, 5].map { |v| v *v }.inject(:+) / 3
# => 16
上のように、全ての要素を2乗し合計したものを要素数3で割って算出しています。
これをTensorflowで計算させると・・
これを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
上の例でのノードは
array
、square
、reduce
になります。[3,4,5]
のデータは各ノードを通り、最終的に計算された値が出力されます。セッション
実際に計算を行う為にTensorflowではセッションを作成します。
sess = tf.Session()
run
メソッドにノードを渡すことで対象のノードを計算します。sess.run(reduce)
ちなみに上の
array
、square
、reduce
の各ノードを実行させると・・$ 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 件のコメント:
コメントを投稿