TensolFlowはじめます

やってみます。

インストール

ここ参照のこと。

[bash]
# Ubuntu/Linux 64-bit, CPU only:
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled:
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

# Mac OS X, CPU only:
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
[/bash]

簡単ですね。

確かめてみる

以下Pythonコンソール。

[python]
> a = tf.constant(1)
> b = tf.constant(3)
> sess = tf.Session()
> sess.run(a+b)
4
> sess.run(a*b)
3

> mat1 = tf.constant([[3., 3.]])
> mat2 = tf.constant([[2.], [2.]])
> product = tf.matmul(mat1, mat2)
> sess.run(product)
array([[ 12.]], dtype=float32) #←numpyのndarrayですね
[/python]

分散処理・GPU処理しやすいようにTensorFlow用オブジェクトで値をラップしてあげるような感じでしょうか。ここだけ見るとあんまり機械学習って感じはしないですね。実際、TensorFlowの設計思想としては「分散・GPU処理フレームワーク」の上に機械学習ライブラリが揃っているというようなイメージなんでしょうか。まだあんまり良くわかってないけど。

もうちょっと基礎的な使い方を見て行きましょう。
以下ページ参照。

Basic Usage

[python]
> sess = tf.InteractiveSession()
> a = tf.constant([3., 3.])
> x = tf.Variable([1., 2.])
> x.initializer.run()
>
> sub = tf.sub(x, a)
> print sub.eval()
[-2. -1.]
> sess.close()
[/python]

Interactiveな環境の場合はinteractive sessionを使うと良いとあります。このあたりちょっと良くわからん。tf.InteractiveSession()を実行すると暗黙的に一つのセッションを自動的に選択して計算を行うようになるみたい。

次は変数の使い方。

[python]
> import tensorflow as tf
>
> state = tf.Variable(0, name="counter")
>
> one = tf.constant(1)
> new_value = tf.add(state, one)
> update = tf.assign(state, new_value)
>
> init_op = tf.initialize_all_variables()
>
> with tf.Session() as sess:
... sess.run(init_op)
... print sess.run(state)
... for _ in range(3):
... sess.run(update)
... print sess.run(state)
...
0
1
1
2
2
3
3
[/python]

なんで重なって出るんだ?と思ったら、sess.run(update)でアサインした結果が出力されるからREPLだと表示されるということみたい。

次は演算結果を別の演算に使う例。

[python]
> input1 = tf.constant(3.0)
> input2 = tf.constant(2.0)
> input3 = tf.constant(5.0)
> intermed = tf.add(input2, input3)
> mul = tf.mul(input1, intermed)
>
> with tf.Session() as sess:
... result = sess.run([mul, intermed])
... print result
...
[21.0, 7.0]
>
[/python]

なるほど。

次はFeeds。上記と似たような例だが値をダイレクトに指定できるらしい。

[python]
> input1 = tf.placeholder(tf.float32)
> input2 = tf.placeholder(tf.float32)
> output = tf.mul(input1, input2)
>
> with tf.Session() as sess:
... print sess.run([output], feed_dict={input1:[7.], input2:[2.]})
...
[array([ 14.], dtype=float32)]
>
[/python]

うーん…。使いどころがまだ良くわからん。一連の演算と一切関係ないフローで計算した結果を代入したいときって何かあるんだろうか。

とりあえず今回はこんな感じ。次はサンプルコードを動かしてみる。