Edited at

[Keras/TensorFlow] Keras(Tensorflow)の環境構築

More than 1 year has passed since last update.


目的

ゼロからKerasとTensorFlow(TF)を自由自在に動かせるようになる。

そのための、End to Endの作業ログ(備忘録)を残す。

※環境はMacだが、他のOSでの汎用性を保つように意識。

※アジャイルで執筆しており、精度を逐次高めていく予定。


環境


  • Mac: 10.12.3

  • Python: 3.6

  • TensorFlow: 1.0.1

  • Keras: 2.0.2


To Do


Keras導入編

Keras(Tensorflow)の環境構築<---いまココ

KerasでMINSTの学習と予測

KerasでTensorBoardの利用

Kerasで重みファイルの保存/読み込み

Kerasで自前データの学習と予測

Kerasで転移学習


流れ

Anacondaの仮想環境の中にTFとKerasをインストールし、サンプルコールを実行する。

Anacondaのインストールはpyenvを利用、Anacondaの公式サイトから直接インストールしても良い。


pyenvのインストール

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

環境変数の設定 ※ターミナルを再起動すると設定が有効になる。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile


Anacondaのインストール

Anacondaのバージョン確認

pyenv install --list | grep anaconda3

以下が表示される。多くのバージョンが表示されるが、今回は末尾の部分のみ掲載した。

  anaconda3-4.2.0

anaconda3-4.3.0
anaconda3-4.3.1

最新版をインストール

// this will take time

pyenv install anaconda3-4.3.1

pyenv versions

pyenv global anaconda3-4.3.1

Anacondaの環境変数を設定 ※ターミナルを再起動すると設定が有効になる。

echo 'PATH="$PYENV_ROOT/versions/anaconda3-4.3.1/bin:$PATH"' >> ~/.bash_profile


Python 3.6の仮想環境の作成

py36という名前のPython3.6の仮想環境を作成する。

仮想環境のメリットは、例えばPython2系を使いたい場合に別の仮想環境を作れば、作業環境の切り分けが簡単になる。

// this will take time

conda create -n py36 python=3.6 anaconda

仮想環境を起動

source activate py36

作られた仮想環境の確認

conda info --envs

一覧が表示される。*は現在いる仮想環境

# conda environments:

#
py36 * /Users/XXX/anaconda/envs/py36
root /Users/XXX/anaconda

ちなみに、仮想環境を閉じたいときのコマンド

source deactivate py36


TFのインストール

pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.1-py3-none-any.whl

pythonを立ち上げ稼働確認

python

以下を実行

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

Hello, TensorFlow!が表示されたらセットアップ成功である。

python終了

quit()


Kerasのインストール

pip install keras==2.0.2


サンプルコードで挙動確認

Kerasのサンプルスクリプトのインストール

git clone https://github.com/fchollet/keras.git

グラフの表示に必要なライブラリのインストール

brewのインストールは公式サイトを参考:https://brew.sh/index_ja.html

// this will take time

brew install graphviz
pip install pydot
pip install pydot-ng
pip install graphviz

今回はMINSTを学習するサンプルを見てみる。Spyderというのはpythonの開発環境でAnacondaをインストールした時に付随する。

spyder keras/examples/mnist_mlp.py

実行時間短縮のためにepochs = 3にした。

また、後半にグラフ表示のためのスクリプトを追加した。


mnist_mlp.py

from __future__ import print_function

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop

batch_size = 128
num_classes = 10
epochs = 3

# the data, shuffled and split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))

model.summary()

model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])

history = model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

### add to show graph
import matplotlib.pyplot as plt
def plot_history(history):
# print(history.history.keys())

# 精度の履歴をプロット
plt.plot(history.history['acc'], marker='.')
plt.plot(history.history['val_acc'], marker='.')
plt.title('model accuracy')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.grid()
plt.legend(['acc', 'val_acc'], loc='lower right')
plt.show()

# 損失の履歴をプロット
plt.plot(history.history['loss'], marker='.')
plt.plot(history.history['val_loss'], marker='.')
plt.title('model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.legend(['loss', 'val_loss'], loc='lower right')
plt.show()

plot_history(history)


Spyderの画面にある実行ボタン▶あまたはF5を押す、出力が表示される。

60000 train samples

10000 test samples
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_10 (Dense) (None, 512) 401920
_________________________________________________________________
dropout_7 (Dropout) (None, 512) 0
_________________________________________________________________
dense_11 (Dense) (None, 512) 262656
_________________________________________________________________
dropout_8 (Dropout) (None, 512) 0
_________________________________________________________________
dense_12 (Dense) (None, 10) 5130
=================================================================
Total params: 669,706.0
Trainable params: 669,706.0
Non-trainable params: 0.0
_________________________________________________________________
Train on 60000 samples, validate on 10000 samples
Epoch 1/3
60000/60000 [==============================] - 14s - loss: 0.2457 - acc: 0.9240 - val_loss: 0.1238 - val_acc: 0.9598
Epoch 2/3
60000/60000 [==============================] - 15s - loss: 0.1038 - acc: 0.9685 - val_loss: 0.0879 - val_acc: 0.9735
Epoch 3/3
60000/60000 [==============================] - 16s - loss: 0.0752 - acc: 0.9766 - val_loss: 0.0813 - val_acc: 0.9759
Test loss: 0.081280838731
Test accuracy: 0.9759

accとlossのグラフも表示される。

keras_minst_acc.png

keras_minst_loss.png

以上で環境構築は完了です。


End