じぶんメモ

プログラミングのメモ、日常のメモとか。

TensorflowとKerasを使ってmnistの訓練と評価をしてみる

Tensorflow・Kerasとは(ザックリ)

  • Tensorflowはpythonで使える機械学習のためのライブラリ
  • Kerasは更にラッパーライブラリで、Tensorflowだと数百行かかるコードが数十行で済んだりする。

インストール方法

とりあえずpipで入れてみる。

$ pip install -U tensorflow
$ pip install -U keras

Tensorflow・Kerasを使ってmnistの訓練を行う

from keras.datasets    import mnist
from keras.models      import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers  import Adam
from keras.utils       import np_utils

# mnistデータの読み込み
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# データをfloat型にして正規化する
# データ数×縦ピクセル数×横ピクセル数のデータをデータ数×784の方にする
X_train = X_train.reshape(60000, 784).astype('float32') / 255
X_test  = X_test.reshape(10000, 784).astype('float') / 255

# ラベルをone_hot形式に変換
y_train = np_utils.to_categorical(y_train, 10)
y_test  = np_utils.to_categorical(y_test, 10)

# モデルの構造を定義
model = Sequential()
# 1層目
model.add(Dense(512, input_shape=(784,)))
model.add(Activation('relu'))

# 2層目
model.add(Dense(512))
model.add(Activation('relu'))

# 出力
model.add(Dense(10))
model.add(Dropout(0.2))
model.add(Activation('softmax'))

# モデルの構築
model.compile(
    loss='categorical_crossentropy',
    optimizer=Adam(),
    metrics=['accuracy'])

# データで訓練
hist = model.fit(X_train, y_train)

# テストデータで評価する
loss, accuracy = model.evaluate(X_test, y_test, verbose=1)
print('loss=', loss)
print('accuracy=', accuracy)

特に注目したいのがmodelを用いて直感的に学習の手順を記述することができる。
コードでは3層のニューラルネットワークを構築している。
Denseは全結合を行うモジュールで、1層目のみ入力データのサイズを指定する必要がある。

モデルを定義し、コンパイルし、訓練をし、テストデータで精度を評価するという流れ。