知識ゼロからTensorFlowを使った機械学習で人工知能を作るー入門編１

# TensorFlow

TensorFlowはGoogleがオープンソースとして公開した機械学習のライブラリ。
www.tensorflow.org

ここしばらく機械学習の本読んで、TensorFlow触りまくって出した結論はこれ。

**TensorFlowは機械学習の初心者がスグにカンタンに使えるモノではない**

TensorFlowを使えば機械学習の概念をそのまま直感的にコードに落としこむことができる。ただ、そのためには機械学習の理論を予め知っておくことが必要。「ニューラル・ネットワーク」とか「構造パターンマイニング」とかの用語が分からないといちいちそこで手を止めて、調べる必要が出てくる。

ただ数学好きであれば、全てが数式で表現される世界が妙に楽しい。アルゴリズムや使い方さえ分かれば、かなりのレベルで面白いモノが実装できることは確かだ。

# TensorFlowのインストール（MacOS編）

まーここ見てインストールしても一緒だけど、一応書いておく。だいたい５分もあれば完了する。
https://www.tensorflow.org/versions/master/get_started/os_setup.html


pythonのバージョン確認。2.7以上であればOk

```
$ python -V
Python 2.7.10
```

pip をインストール

```
$ sudo easy_install pip
```

virtualenv をインストール

```
$ sudo pip install --upgrade virtualenv
```

virtualenv 環境を`~/tensorflow` に作成（もし別の場所に入れたければフォルダの指定を変える）

```
$ virtualenv --system-site-packages ~/tensorflow
```

tensorflowをアクティベートする。実行後、コマンドプロンプトの表示が (tensorflow)$になる。

```
$ source ~/tensorflow/bin/activate
```

TensorFlowをインストール

```
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
```

おわり。

# カンタンなPythonプログラムの作成

小難しい理屈の前に「なんでもいいから動かしたい！」の気持ちにお応えして、Python未経験者でもカンタンに分かるPythonのコードから始める。

```
x = 1
y = x + 2
print(y)
```

このコードを書いてtest.pyとかの名前で保存。
で、実行すると

```
(tensorflow)$ python test.py
3
```

当然ながら３という結果が出る。

# TensorFlowでカンタンなPythonプログラムを書き直す

次にこれをちょっとTensorFlow風に書き直してみる。

```
import tensorflow as tf

x = tf.constant(1, name='x')
y = tf.Variable(x + 2, name='y')

print(y)
```

test2.pyで保存して実行した結果がこれ。

```
(tensorflow) $ python test2.py
<tensorflow.python.ops.variables.Variable object at 0x10f6e5110>
```

なんか明らかに違うぞ、と。
理由はひとつ前のコードとは異なる処理を実行しているから。

test2.pyのコードを１行ずつ処理内容を解説する

1. tensorflow moduleをインポートして、それをtfとする
2. constant value作って、それをxとする。そのxに数字の１を入れる
3. 変数作って、それをyとする。そのyの定義をx+2と同じ、とする
4. yを出力する

つまり微妙な違いはyが定義されただけで、ひとつ前のコードのように数値がまだ入っていなかった。

これをちゃんとしたコードに修正するとこうなる。

```
import tensorflow as tf

x = tf.constant(1, name='x')
y = tf.Variable(x + 2, name='y')

model = tf.initialize_all_variables()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))
```

１行ごとの解説

1. tensorflow moduleをインポートして、それをtfとする
2. constant value作って、それをxとする。そのxに数字の１を入れる
3. 変数作って、それをyとする。そのyの定義をx+2と同じ、とする
4. 変数をinitialize_all_variablesで初期化する
5. 実行するためのsession作る
6. 4で作ったモデルを実行する
7. yを実行して出力する

すると結果はこの通り３となる。

```
(tensorflow) hellow $ python test2.py
can't determine number of CPU cores: assuming 4
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
can't determine number of CPU cores: assuming 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
3
```
　
# 入門編１のまとめ

上記の例だけでは「面倒くさー」と思うかもしれないが、これはあくまでカンタンな例だからだ。そしてこの辺りが通常のコードとTensorFlowがちょっと違う箇所になる。
「こんなカンタンなのじゃなくて『自然言語処理』とか『未来予想』なんかを解説しろよ」と思われた方は、まずはここが分かってないと後で結局またここに戻ってくることになってしまうので、まずはここから書いた。
AlphaGoが囲碁の世界チャンピオンを負かしたニュースに心がザワついて、しゃべりかけるだけでステキな反応を返すAmazonEchoに心をときめかせた方ならきっとTensorFlowを使った機械学習の世界にのめり込んでしまう。いやー機械学習オモロイ！熱い！

この入門書が本格的に面白くなってくるのは次回以降ということで。

## エンジニアの皆様へ
「[ほとんどのエンジニアには解けるが、下位10％のダメなエンジニアにだけ解けないパズル?](http://tango-ruby.hatenablog.com/entry/2015/11/30/122814)」なるものをシリーズ化していくつか作成した。もしご興味あれば解いてみてください。ちなみに本パズルはTensorFlowは関係ないです。
http://tango-ruby.hatenablog.com/entry/2015/11/30/122814