Python3の環境でTensorflowのサンプルを動かす

#概要
Python3の環境でTensorflowのサンプルがとりあえず動作するところまでの手順について記載します。
Tensorflow公式ページのチュートリアルのトップに掲載されているサンプルプログラムを動作させることが目的になります。
<https://www.tensorflow.org/tutorials/>

![01_概要.png](https://qiita-image-store.s3.amazonaws.com/0/131520/51bec3a3-b1cf-a06f-3249-75a89ca7615b.png)


#環境の確認
今回の環境については下記の通りです。

```
$ python -V
Python 3.6.5

$ pip -V
pip 10.0.1 from /home/ec2-user/environment/MyTensorflow/venv/lib64/python3.6/dist-packages/pip (python 3.6)
```

#Tensorflowのインストール
pipコマンドを利用してTensorflowをインストールします。
tensorflowのパッケージには計算をCPUを利用して行うものと、GPUを利用して行うものが存在しますが、今回の環境ではCPUを利用して計算を行うパッケージを利用してします。
下記のコマンドを実行しインストールを行ってください。

```
$ pip install tensorflow

$ pip freeze
absl-py==0.2.2
astor==0.7.1
bleach==1.5.0
gast==0.2.0
grpcio==1.13.0
html5lib==0.9999999
Markdown==2.6.11
numpy==1.14.5
protobuf==3.6.0
six==1.11.0
tensorboard==1.8.0
tensorflow==1.8.0
termcolor==1.1.0
Werkzeug==0.14.1
```

#Tensorflowの動作確認

tensorflowのパッケージがインストールされたので、実際にtensorflowのパッケージを読み込んで関数を実行できるか確認してみましょう。
コマンドで「python」と入力すると対話型モードでpythonを実行できるようになるので、下記のコマンドを1行づつ張り付けてください。
正常に動作していれば「b'Hello World TensorFlow'」と表示されます。
※「Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA」というインフォメーションが表示されますが、AVX2 FMAのCPUの拡張命令セットを使えばもっと速く動作させることができるというメッセージなので無視して問題ありません。

```
$ python
Python 3.6.5 (default, Apr 26 2018, 00:14:31) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello World TensorFlow')
>>> sess = tf.Session()
2018-07-12 09:53:54.209491: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
>>> print(sess.run(hello))
b'Hello World TensorFlow'
>>> quit()
```

#Tensorflowチュートリアルのソースコードを公式ページからコピーする

プロジェクト用のディレクトリを作成し、Tensorflowチュートリアルのソースコードを公式ページからコピーして保存してください。
今回は「tutorial.py」というファイル名で保存しています。

```
$ mkdir MyTensorflow

$ cd MyTensorflow/

$ vi tutorial.py
```

```python:tutorial.py
import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
```

#Tensorflowチュートリアルを実行する

Tensorflowチュートリアルを実行すると下記のように表示されます。
60000回の学習が5セット実行され、試行回数が増えるごとにLoss:「目標値との誤差」が減少していることが確認できます。

```
$ python tutorial.py 
Epoch 1/5
2018-07-13 23:09:56.756787: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
60000/60000 [==============================] - 13s 214us/step - loss: 0.2213 - acc: 0.9353
Epoch 2/5
60000/60000 [==============================] - 12s 207us/step - loss: 0.0994 - acc: 0.9697
Epoch 3/5
60000/60000 [==============================] - 12s 205us/step - loss: 0.0687 - acc: 0.9788
Epoch 4/5
60000/60000 [==============================] - 12s 202us/step - loss: 0.0545 - acc: 0.9829
Epoch 5/5
60000/60000 [==============================] - 12s 200us/step - loss: 0.0429 - acc: 0.9864
10000/10000 [==============================] - 0s 42us/step
```

以上です。