LoginSignup
2
4

More than 5 years have passed since last update.

[TensorFlow] Keras on TensorFlow はじめの一歩

Posted at

概要

Keras, TensorFlowをインストールし、MNISTのCNNを実行してみます。

Keras

Kerasはニューラルネットワークを簡単に記述できるPythonのライブラリです。バックエンドは、TensorFlowとTheanoに対応しています。2016/9にリリースされたver.1.1.0からデフォルトのバックエンドがTensorFlowになりました。

構築する環境

  • AWS EC2 t2.micro
  • Ubuntu Server 16.04 LTS (HVM), SSD Volume Type - ami-0567c164
  • Python: 3.5.2
  • TensorFlow: 0.12
  • Keras: 1.1.1

Python環境のインストール

※ Python 3.5.2 は最初からインストールされています。

$ sudo apt-get -y update
$ sudo apt-get -y install python3-pip python3-dev

TensorFlowのインストール

$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0-cp35-cp35m-linux_x86_64.whl
$ sudo -H pip3 install --upgrade $TF_BINARY_URL

TensorFlowの動作チェック

$ python3 /usr/local/lib/python3.5/dist-packages/tensorflow/models/image/mnist/convolutional.py

Kerasのインストール

$ sudo -H pip3 install keras

$ sudo apt-get -y install graphviz
$ sudo -H sudo pip3 install pydot-ng
$ sudo -H sudo pip3 install h5py

graphvizとpydot-ngは、モデルを画像出力するのに使います。
h5pyは、HDF5フォーマットの情報を入出力するのに使います。

Kerasの動作チェック

examplesのmnist_cnn.pyを実行してみます。

$ python3 mnist_cnn.py
Using TensorFlow backend.
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.pkl.gz
15286272/15296311 [============================>.] - ETA: 0sX_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
60000/60000 [==============================] - 214s - loss: 9.1101 - acc: 0.4070 - val_loss: 6.9043 - val_acc: 0.57                       02
Epoch 2/12
60000/60000 [==============================] - 214s - loss: 7.7077 - acc: 0.5201 - val_loss: 5.0885 - val_acc: 0.68                       33
Epoch 3/12
60000/60000 [==============================] - 214s - loss: 6.8004 - acc: 0.5765 - val_loss: 4.1852 - val_acc: 0.73                       90
Epoch 4/12
60000/60000 [==============================] - 219s - loss: 5.8370 - acc: 0.6363 - val_loss: 3.7302 - val_acc: 0.7668
Epoch 5/12
60000/60000 [==============================] - 220s - loss: 5.2334 - acc: 0.6739 - val_loss: 3.0775 - val_acc: 0.8081
Epoch 6/12
60000/60000 [==============================] - 219s - loss: 5.0515 - acc: 0.6850 - val_loss: 3.4284 - val_acc: 0.7862
Epoch 7/12
60000/60000 [==============================] - 219s - loss: 4.8637 - acc: 0.6966 - val_loss: 2.7935 - val_acc: 0.8254
Epoch 8/12
60000/60000 [==============================] - 219s - loss: 4.6540 - acc: 0.7101 - val_loss: 2.7168 - val_acc: 0.8302
Epoch 9/12
60000/60000 [==============================] - 254s - loss: 4.4473 - acc: 0.7227 - val_loss: 2.7631 - val_acc: 0.8280
Epoch 10/12
60000/60000 [==============================] - 716s - loss: 4.3329 - acc: 0.7299 - val_loss: 2.8391 - val_acc: 0.8232
Epoch 11/12
60000/60000 [==============================] - 2250s - loss: 4.2979 - acc: 0.7322 - val_loss: 2.5995 - val_acc: 0.8378
Epoch 12/12
60000/60000 [==============================] - 2137s - loss: 4.3999 - acc: 0.7259 - val_loss: 2.5785 - val_acc: 0.8392
Test score: 2.57848101082
Test accuracy: 0.8392

モデルを画像出力
Kerasは構築したmodelをplot()で画像出力できます。

from keras.utils.visualize_util import plot
plot(model, show_shapes=True, show_layer_names=True, to_file='model.png')

mnist_cnn.pyはこんなモデルです。

model_mnist_cnn_mini.png

対応するプログラムはこちら。

model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='valid', input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))

Kerasはモデルとプログラムを1:1対応で記述できるので分かりやすいですね。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4