はらぺこらいおん

日々、思ったことを。

Macbook ProにKeras with Tensorflowをセットアップ

Keras良くない?って話を聞くことが多くなってきたので、KerasをMacbook Proにインストールして試してみたいと思います。 もちろんMBPなので、GPUなしです。 KerasはTensorflowかTheanoの上で動作するニューラルネットワークライブラリだそうです。

Keras Documentation

公式に日本語のドキュメントもあり、セットアップでつまづくことはあまりないかと思います。

セットアップ

Tensorflowインストール

まずは、Tensorflowをインストールします。

Installing TensorFlow  |  TensorFlow

私のmacにはanacondaでpythonが入っているのでそのままpipでインストールします。

$ pip install tensorflow

以上でインストールは終了です。

Tensorflowの環境に入るには以下のコマンドを実行します。

$ source activate tensorflow

環境から抜ける場合は、以下のコマンドを実行します。

$ source deactivate

Kerasインストール

こちらもpipでインストールできます。

$ pip install keras

Kerasバックエンド変更

バックエンドの変更は不要になりました。デフォルトでTensorflowが動作します。

Kerasのバックエンドで動作するライブラリーを変更します。

# ~/.keras/keras.json

"backend": "tensorflow"

このように書き換えます。

その他ライブラリーインストール

これ以外にも必要なライブラリーをインストールします。

  • h5 モデルを保存する際に使います。
$ pip install h5py
  • matplotlib 学習結果などを描画する際に使います。
$ brew install graphviz
$ pip install pydot_ng
$ pip install matplotlib

このようなエラーが出る場合は、下記の記事を参照。

RuntimeError: Python is not installed as a framework

Python 3.3でmatplitlibとpylabを使おうとしたら RuntimeError: Python is not installed as a frameworkというエラーが発生したときの解決方法 - Qiita

テスト

Tensorflow

以下のようにimportをして正常にインストールされているか確認します。

$ python
>>> import tensorflow as tf

これを実行してみてエラーが出なければOKです。

Keras

こちらのMNISTのサンプルプログラムを実行してみます。

keras/mnist_mlp.py at master · fchollet/keras · GitHub

ダウンロードしてtest.pyとして保存します。(名前はなんでも良いです。)

$ python test.py
Using TensorFlow backend.
60000 train samples
10000 test samples
____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
dense_1 (Dense)                  (None, 512)           401920      dense_input_1[0][0]              
____________________________________________________________________________________________________
activation_1 (Activation)        (None, 512)           0           dense_1[0][0]                    
____________________________________________________________________________________________________
dropout_1 (Dropout)              (None, 512)           0           activation_1[0][0]               
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 512)           262656      dropout_1[0][0]                  
____________________________________________________________________________________________________
activation_2 (Activation)        (None, 512)           0           dense_2[0][0]                    
____________________________________________________________________________________________________
dropout_2 (Dropout)              (None, 512)           0           activation_2[0][0]               
____________________________________________________________________________________________________
dense_3 (Dense)                  (None, 10)            5130        dropout_2[0][0]                  
____________________________________________________________________________________________________
activation_3 (Activation)        (None, 10)            0           dense_3[0][0]                    
====================================================================================================
Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
____________________________________________________________________________________________________
Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 10s - loss: 0.2447 - acc: 0.9237 - val_loss: 0.1253 - val_acc: 0.9611
Epoch 2/20
60000/60000 [==============================] - 10s - loss: 0.1027 - acc: 0.9694 - val_loss: 0.0799 - val_acc: 0.9739
Epoch 3/20
60000/60000 [==============================] - 11s - loss: 0.0751 - acc: 0.9774 - val_loss: 0.0729 - val_acc: 0.9783
Epoch 4/20
60000/60000 [==============================] - 10s - loss: 0.0615 - acc: 0.9815 - val_loss: 0.0852 - val_acc: 0.9761
Epoch 5/20
60000/60000 [==============================] - 10s - loss: 0.0514 - acc: 0.9846 - val_loss: 0.0847 - val_acc: 0.9800
Epoch 6/20
60000/60000 [==============================] - 9s - loss: 0.0457 - acc: 0.9861 - val_loss: 0.0866 - val_acc: 0.9791
Epoch 7/20
60000/60000 [==============================] - 9s - loss: 0.0398 - acc: 0.9881 - val_loss: 0.0778 - val_acc: 0.9810
Epoch 8/20
60000/60000 [==============================] - 9s - loss: 0.0351 - acc: 0.9897 - val_loss: 0.0853 - val_acc: 0.9821
Epoch 9/20
60000/60000 [==============================] - 9s - loss: 0.0327 - acc: 0.9905 - val_loss: 0.0933 - val_acc: 0.9796
Epoch 10/20
60000/60000 [==============================] - 9s - loss: 0.0283 - acc: 0.9914 - val_loss: 0.0911 - val_acc: 0.9822
Epoch 11/20
60000/60000 [==============================] - 9s - loss: 0.0285 - acc: 0.9920 - val_loss: 0.1031 - val_acc: 0.9829
Epoch 12/20
60000/60000 [==============================] - 9s - loss: 0.0241 - acc: 0.9931 - val_loss: 0.0992 - val_acc: 0.9814
Epoch 13/20
60000/60000 [==============================] - 9s - loss: 0.0250 - acc: 0.9931 - val_loss: 0.1169 - val_acc: 0.9797
Epoch 14/20
60000/60000 [==============================] - 10s - loss: 0.0233 - acc: 0.9936 - val_loss: 0.1019 - val_acc: 0.9819
Epoch 15/20
60000/60000 [==============================] - 11s - loss: 0.0184 - acc: 0.9945 - val_loss: 0.0945 - val_acc: 0.9830
Epoch 16/20
60000/60000 [==============================] - 10s - loss: 0.0188 - acc: 0.9947 - val_loss: 0.1066 - val_acc: 0.9818
Epoch 17/20
60000/60000 [==============================] - 10s - loss: 0.0188 - acc: 0.9946 - val_loss: 0.1090 - val_acc: 0.9846
Epoch 18/20
60000/60000 [==============================] - 10s - loss: 0.0193 - acc: 0.9953 - val_loss: 0.1127 - val_acc: 0.9820
Epoch 19/20
60000/60000 [==============================] - 9s - loss: 0.0176 - acc: 0.9951 - val_loss: 0.1204 - val_acc: 0.9823
Epoch 20/20
60000/60000 [==============================] - 9s - loss: 0.0162 - acc: 0.9957 - val_loss: 0.1248 - val_acc: 0.9829
Test score: 0.124780163151
Test accuracy: 0.9829

MBP(core i7 @2.8GHz)だと20epochで200秒くらいで終わります。