Googleから出た機械学習ライブラリTensorFlowのインストール

GoogleからDeepLearningなどを含んだ機械学習ライブラリが公開されたので、早速触ってみました。
http://japanese.engadget.com/2015/11/09/google-tensorflow/

## 実施した環境
ubuntu 14.04
GeForce GTX 580
CUDA 7.0
Cudaは、[こちら](http://qiita.com/bohemian916/items/a48e6496b04bbbf09fb3)の手順でインストール済み

## 本体のインストール
pipでインストールするだけです。

```
pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
```

## インストール確認
ちゃんとインストールできているか確認します。

```
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:77] LD_LIBRARY_PATH: /usr/local/cuda-7.0/lib64:
I tensorflow/stream_executor/cuda/cuda_dnn.cc:1062] Unable to load cuDNN DSO.
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 8
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:888] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:88] Found device 0 with properties: 
name: GeForce GTX 580
major: 2 minor: 0 memoryClockRate (GHz) 1.544
pciBusID 0000:01:00.0
Total memory: 1.50GiB
Free memory: 1023.72MiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:112] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:122] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:611] Ignoring gpu device (device: 0, name: GeForce GTX 580, pci bus id: 0000:01:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.5.
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>> exit()
```
なんか色々言われてますが、一応動くようです。
ここらへんは、GPUサポートの影響みたいです。

## Cuda サポートについて
GPUで演算を行うためには、対応GPUの搭載と、Cuda Toolkit 7.0とCUDNN 6.5 V2のインストールが必要です。
chainerインストールの時にCUDAはインストールしていたので、CUDNNだけかと思いきや、手持ちのGPUが対応していませんでした。[公式](http://tensorflow.org/get_started/os_setup.md)には、
> TensorFlow GPU support requires having a GPU card with NVidia Compute Capability >= 3.5. Supported cards include but are not limited to:

と書かれております。Compute Capabilityとはなんぞや？ということは、[NVIDIAの質問回答](https://www.facebook.com/NVIDIAGPUComputing/posts/481357031976329)に書かれていました。


> Q: Compute Capabilityとは何ですか？
また、GPUのCompute Capabilityの一覧はありますか？  
  A: まず、Compute Capabilityとは、GPUのアーキテクチャのバージョンとでもいうべきものです。
たとえば、Compute capability 2.0, 2.1はFermi、3.0, 3.5はKepler、5.0はMaxwellとなります。



持っているGeForce GTX 580では、このバージョンが2.0なので, TensorFlowではGPU演算に使えませんでした。したがって、今回はCPUのみでMNISTを動かします。

## MNISTを動かす
MNISTの説明については、公式にて、[MNISTを知ってる人向けの説明](http://tensorflow.org/tutorials/mnist/pros/index.md)と、[知らない人用の説明](http://tensorflow.org/tutorials/mnist/beginners/index.md)の２つがあったので、参考にしてください。簡単に言うと、手書き数字の認識です。

ソースをとってきて、MNISTのサンプルを動かします。
MNISTサンプルを動かす手順はこちらです。

```
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
python tensorflow/models/image/mnist/convolutional.py
```

これを行うと、MNISTの手書きの数字ファイルを取得し、畳み込みNNによる学習が始まります。学習の状況が都度流れてくるので、眺めます。

```
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8
Initialized!
Epoch 0.00
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Epoch 0.12
Minibatch loss: 3.285, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.0%
Epoch 0.23
Minibatch loss: 3.473, learning rate: 0.010000
Minibatch error: 10.9%
Validation error: 3.7%
Epoch 0.35
Minibatch loss: 3.221, learning rate: 0.010000
Minibatch error: 4.7%
Validation error: 3.2%
```

たったこれだけでできてしまったので、拍子抜けしました。
まあCUDAが鬼門なので、次はGPUで動かすようにしたいと思います。