Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

agumon
Deep Learningで良いソリューションを作りたい今日このごろ、ただいまスキルのキャッチアップ中です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした