読者です 読者をやめる 読者になる 読者になる

アラカン"BOKU"のITな日常

あれこれ興味をもって考えたことを書いてます

TensorFlowの使い方をざっくりと理解する。まずは足し算と掛け算から。

とりあえず、TensorFlowの基本を理解しないと始まらない・・のですが、日本語の本とかはまだ少ないみたいです。

 

こちらが本家のサイトです。

www.tensorflow.org

 

ちょっと翻訳して引用してみます。

TensorFlowとは、データフローグラフを使用した数値計算用のオープンソースソフトウェアライブラリです。グラフのノードは数学的演算を表し、グラフのエッジはそれらの間で伝達される多次元データ配列(Tensor)を表します。 

 

ん。わかりづらい。ソースコードで確認した方がよさそうです。

 

TensorFlowの処理とは、簡単に言えば、「グラフを構築して、セッションを使って実行する」ことみたいです。

 

それで、グラフとは「何らかのオペレーション」のオブジェクトと考えれば、わかりやすそうです。

 

ということで、足し算をする「グラフ」と、掛け算をする「グラフ」を作って、それを実行(計算)して、結果を表示する簡単なプログラムをTensorFlowを使って書いてみます。

import tensorflow as tf

def get_add_graph(x, b):
    cop1 = tf.constant(x)
    cop2 = tf.constant(b)
    return tf.add(cop1, cop2)

 

def get_mul_graph(a):
    _vop1 = tf.Variable(0.)
    _vop2 = tf.constant(5.)
    vop1 = tf.assign(_vop1,_vop2)
    return tf.mul(a,vop1)

 

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    add_result = sess.run([get_add_graph(5., 3.)])
    print(add_result)
    mul_result = sess.run([get_mul_graph(5.)]);
    print(mul_result) 

ソースを解説します。

 

まず、足し算・掛け算のもとになる定数と変数を定義します。

 これが定数の定義です。

    cop1 = tf.constant(x)   

 

こちらが変数の初期化と値の設定(assign)です。

_vop1 = tf.Variable(0.)    

vop1 = tf.assign(_vop1,_vop2)

 

こうして定義した定数や変数を使って、グラフを作ります。

 

これが掛け算のグラフを作って返している部分です。

 tf.mul(a,vop1)

 

こっちは、足し算のグラフを作って返している部分です。

tf.add(cop1, cop2)

 

作ったグラフを実行するのは tf.session()のrunです。

 with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    add_result = sess.run([get_add_graph(5., 3.)])
    mul_result = sess.run([get_mul_graph(5.)])

 

変数を使う時は、最初に初期化処理をしておく必要があります。

sess.run(tf.global_variables_initializer())

 

で 足し算の実行  

add_result = sess.run([get_add_graph(5., 3.)])

 

 掛け算の実行

mul_result = sess.run([get_mul_graph(5.)])

 というわけですね。

 

printの部分は、結果を表示しているだけなので説明は不要でしょう。

 

こうしてみると、グラフというのが、何らかのオペレーションをあらわすオブジェクトだという感覚がよくわかりますね。

 

IDLEでF5キーを押して、実行してみた結果です。

f:id:arakan_no_boku:20170307231258j:plain

 

一応、あってるので、ここまではOKとしましょう。

 

f:id:arakan_no_boku:20170404211107j:plain