LoginSignup
4
5

More than 5 years have passed since last update.

Fashion-MNIST を docker+keras+jupyter で 動かしてみた

Last updated at Posted at 2017-09-27

Fashion-MNIST を動かしてみる

(注)このデータはMNISTを少し複雑化することを意図したもので、衣服等の識別に使える種類のデータではない。あくまでもテストデータ。

今回はDockerを用いてKeras + Jupyterの環境を構築する。
Docker及びGitコマンドが使える環境であれば実行できるように記述したつもり。

事前準備

Dockerのインストール
https://www.docker.com/

実行環境

macOS Sierra 10.12.6
MacBook air early 2015

手順

Docker Keras をクローン

$ git clone https://github.com/gw0/docker-keras-full
$ cd docker-keras-full

Docker run

$ docker run -d -p=6006:6006 -p=8888:8888 gw000/keras-full

コンテナIDを取得

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
fb08017a810d        gw000/keras-full    "/bin/sh -c '/bin/..."   3 minutes ago       Up 3 minutes        0.0.0.0:6006->6006/tcp, 0.0.0.0:8888->8888/tcp   dreamy_clarke

取得した"CONTAINER ID" (上記では fb08017a810d )を記録

/bin/bashを実行してコンテナに接続

$ docker exec -it fb08017a810d /bin/bash 

ログイン後、パスを確認

root@fb08017a810d:/srv# pwd
/srv

Fashion-MNISTをクローン

# git clone https://github.com/zalandoresearch/fashion-mnist

接続を終了

# exit

Jupyter notebookに接続

  • ブラウザで http://localhost:8888 を開く
    (ログインパスワード: keras )

  • "fashion-mnist"フォルダが有ることを確認
    fashion-mnist_1.png

  • "New から Python 3"を選択し、ノートブックを作成
    fashion-mnist_2.png

  • コードを貼り付けて実行
    fashion-mnist_3.png

(参考URL:http://10001ideas.com/2017/08/30/fashion-mnist%E3%82%92keras%E3%81%A7cnn%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%88%86%E9%A1%9E%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/)
(注)再実行する際はカーネルをリスタートすること

%matplotlib inline

import os
print(os.getcwd())
os.chdir('./fashion-mnist/')

from keras import backend as K
from utils.mnist_reader import load_mnist
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Activation, Flatten, Dense
from keras.models import Sequential
from keras.utils import np_utils
from keras.initializers import Constant
from keras.optimizers import Adam
import matplotlib.pyplot as plt

#load_mnistはutilsにある
X_train, y_train = load_mnist('data/fashion', kind='train')
X_test, y_test = load_mnist('data/fashion', kind='t10k')

X_train = X_train.astype('float32') / 255
X_test = X_test.astype('float32') / 255
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)

y_test = np_utils.to_categorical(y_test, 10)
y_train = np_utils.to_categorical(y_train, 10)

K.set_image_dim_ordering("th")
#LeNetを構築する
model = Sequential()
model.add(Conv2D(20, kernel_size=5, padding="same", input_shape=(1,28,28)))
model.add(Activation("relu"))
model.add(MaxPooling2D())

model.add(Conv2D(50, kernel_size=5, padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D())

model.add(Flatten())
model.add(Dense(500))
model.add(Activation("relu"))

model.add(Dense(10))
model.add(Activation("softmax"))

model.compile(loss="categorical_crossentropy", optimizer=Adam(), metrics=["accuracy"])
history = model.fit(X_train, y_train, batch_size=128, epochs=20, verbose=1, validation_split=0.2)

score = model.evaluate(X_test, y_test, verbose=1)
print("Test score:", score[0])
print("Test accuracy:", score[1])
print(history.history.keys())

#グラフの表示
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

実行結果 (20エポック実行した結果)

fashion-mnist_4.png

4
5
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
4
5