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

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

Numpyで前処理をして結果を、tensorflowに渡すパターンを試す。

今回は配列データを生成して計算するというのを、TensorFlowでやるとどうなるのかな?をやってみます。

 

感触をつかむための勉強ですね。

 

TensorFlowは「データフローグラフを使用した数値計算用のオープンソースソフトウェアライブラリ」だそうです。

 

本家のサイトにAPIのリファレンスのページ(https://www.tensorflow.org/api_docs/python/)

の、モジュール tfの下を見ていくと、なるほど、sin()とかcos()とかtan()とかcell()とか・・数値計算用のライブラリでおなじみのメソッド名が並んでます。

 

pythonにはNumpyみたいな優れた数値計算用ライブラリがすでにあるので、わざわざtensorflowを使う意味がいまいちピンときていませんが、とりあえず、チュートリアル的に簡単な処理をやってみることにします。

 

練習

 

 0から6までの数字を0.1刻みで生成して、その配列を渡して、sin()値を計算するというのをやります。

 

まず、Numpyでやってみます。

x = np.arange(0,6,0.1)
y = np.sin(x)

 ですね。上の行で、「0から6までの数字を0.1刻みで生成」し、下の行で「sin()値を計算」しています。

 

これをTensorFlowでやるとこうなります。

def get_sin():
    x = tf.range(0.,6.,0.1)
    return tf.sin(x)

with tf.Session() as sess:

    y = sess.run([get_sin()])

 

 tf.range(0.,6.,0.1) で「0から6までの数字を0.1刻みで生成」し、 tf.sin(x)で「sin()値を計算」するんですけど、TensorFlowの場合は、tf.sin(x)だけではグラフを構築しただけでしかないので、sess.runでそれを実行しているというわけですね。

 

どちらも結果は全く同じです。こんな感じのサインカーブを描ける値を生成します。

f:id:arakan_no_boku:20170309194510j:plain

 

値は同じなんですが、OUTPUTの型が全く違います。Numpyは「Numpy配列」、TensorFlowは「Tensor」です。

 

じゃあ、Tensorとはなんだ?です。

 

Tensorは「テンソル」と読み「線形的な量または線形的な幾何概念を一般化したもの」だそうです。

 

多次元配列で表現されているんですが、Rankというもので次元をあらわし、Rankが0なら「スカラー値」、1なら「ベクトル」、2なら「行列」、3なら例えば画像データなどを扱える「3-Tensor」などと一般化形式が決まります。

 

その形式に収めるデータ・タイプは、例えば「float32」「float64」「int8」「int16」・・など、様々なものを収めることができます。

 

どうも、あらゆるデータ型の多種多様な線形的な量または幾何概念を、ひとつのTensorというオブジェクトで表現できてしまうみたいです。すごくないですか。

後日追記:Tensorについても勉強してまとめました。

arakan-pgm-ai.hatenablog.com

 

でも、正直、簡単な数式計算をするだけなら、やっぱNumpyの方が楽ですし、速いわけです。

 

ごちゃごちゃした計算はNumpyでやって、結果だけをTensorFlowに渡して後続の処理をやれないか?って、思いますよね。

 

ということでやってみました。

def get_sin_graph():
    x = np.arange(0,6,0.1)
    y = np.sin(x)
    return tf.constant(y.astype(np.float32))

 

with tf.Session() as sess:

    sin_result = sess.run([get_sin_graph()])

 

Numpy配列を、asTypeを使って、float32とかのTensorでサポートしている型にしてやれば良いみたいです。

f:id:arakan_no_boku:20170309202947j:plain

 

float32の型(dtype)の1次元配列になっていますね。これは、Rank=1 のVectorデータのTensorです。いけたみたいです。

 

tensorflow関連カテゴリの一覧はこちらです。

arakan-pgm-ai.hatenablog.com

f:id:arakan_no_boku:20170914222307j:plain