Macbook ProにKeras with Tensorflowをセットアップ
Keras良くない?って話を聞くことが多くなってきたので、KerasをMacbook Proにインストールして試してみたいと思います。 もちろんMBPなので、GPUなしです。 KerasはTensorflowかTheanoの上で動作するニューラルネットワークライブラリだそうです。
公式に日本語のドキュメントもあり、セットアップでつまづくことはあまりないかと思います。
セットアップ
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
テスト
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秒くらいで終わります。