ユーザ用ツール

サイト用ツール


サイドバー

目次

機械学習とは

プログラミング無しで機械学習

機械学習プログラミング入門

初めてのKeras2.0

初めてのTensorflow(YouTube)

初めてのChainer2.0

初めてのビットコイン

ビットコイン用語集

初めてのSolidityプログラミング

初めての医療統計

初めてのエクセルで医療統計

初めてのEZRで医療統計

初めてのRStudioでレポート作成

スマホアプリ作成ソフトIonic3

スマホアプリ作成ソフトIonic4

Ionicのためのjavascript tips

その他

NiftyCloudMobileBackend

税金など

Dokuwiki

3_モデル設定_keras

以前のリビジョンの文書です


(3)モデルの設定(Keras)

Keras2でMNIST目次
Kerasプログラミングの全体図

  1. (3)モデル設定(Keras) ⇐ いまココ

model = Sequential()からスタートして、順番にモデルを記述していきます。

#3 モデルの記述(Keras)
batch_size = 128
num_classes = 10
# epochs = 20
epochs = 3

model = Sequential()
# model.addでモデルを記述していく

model.summary()

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

モデルの記述は、見たままな感じで、個人的にはKerasのこのモデルの記述方法が分かりやすくて好みです。

開発環境

Windows 8.1
Anaconda
Python 3.5
Tensorflow 1.4
Keras 2.0.9

Keras2.0のインストール方法はwindowsにkeras2.0をインストールをご覧下さい。

このページは、(1)Kerasを使用するためのimport文の続きであり、今回は、MNISTのデータの準備・設定を行っていきます。

データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。

オリジナルデータセットの準備については、後日、Keras2用自前データの準備に記載予定です。

手順

0. 前回終了時の画面

(1)Kerasを使用するためのimport文終了時の、以下のような状態から始めます。

1. データセットの準備

以下のコードを入力して、Shift + Enterを押します。最初は、MNISTの画像データなどがダウンロードされるので、時間がかかります。

#2 データ準備(Keras)(MNISTの場合)
# Kerasが用意しているMNISTデータセットをダウンロードしてx_train, y_train, x_test, y_testに代入
# https://keras.io/ja/datasets/ を参照
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

# matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。
%matplotlib inline
import matplotlib.pyplot as plt

# データの例示
x = x_train[0]
t = np.argmax(y_train[0])
plt.imshow(x.reshape(28, 28), cmap='gray')
plt.show()
print('label:', t)

以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...」といった感じの文字が4行続くかもしれません。)

順に解説していきます。

#2 データ準備(Keras)(MNISTの場合)
# Kerasが用意しているMNISTデータセットをダウンロードしてx_train, y_train, x_test, y_testに代入
# https://keras.io/ja/datasets/ を参照
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

Kerasが用意しているkeras.datasetsから、手書き数字MNISTのデータをダウンロードして読み込みます。

MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。
http://exceldeeplearning.blog.jp/archives/1411297.html
ちなみに、よく言われているMNISTの元データのダウンロードついては、こちらをご覧いただければと思います。ただ、上記サイトのデータも、画像が既に数値の配列に変換されたものであるので、画像をダウンロードしたい場合は、サンプル数などは少し異なりますが、手書き数字MNISTのjpgファイル群をダウンロードする方法をご覧頂ければ幸いです。

手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。

ただ、画像のままではKerasでは読み込めません。そのため、画像を0~255の値をとる284個の数字が1列に並んだ配列に変換(reshape(60000, 784))し、さらに正規化といって全部255で割ったたものをx_trainに代入しています。
さらに、以下のコードで、正解ラベルをone hot ベクトルに変換したものを、y_trainに代入しています。

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

具体的には、今回、

print(x)
print(t)

と入力してShift + Enterで実行すると、以下のように表示されてます。

xは、1×784のNumpy配列(各要素は0から1までの数値(dtype=float32))であり、tは正解ラベル(dtype=int32)となっています。

コードの解説に戻ります。
次は、x_train[0]の画像データをJupyter Notebookで可視化しています。

# matplotlibを使ったグラフ描画結果がjupyter notebook内に表示されるようにする。
%matplotlib inline
import matplotlib.pyplot as plt

# データの例示
# x_trainデータセットの1行目、つまり、画像データのNumpy配列(1x784)をxとして取り出す
x = x_train[0]
# y_trainの正解ラベル(one-hot表現のベクトル)の1行目を取り出し、numpyのargmax関数で数値として取り出す
# 今回は正解ラベルのインデックスが、そのまま、数字0や1のラベルとなっている。
t = np.argmax(y_train[0])
# 1x784のNumpy配列xを、28x28のNumpy配列に変換後、matplotlibのpyplotを用いて、
# グレースケール画像として読み込み、Jupyter Notebook内で表示
plt.imshow(x.reshape(28, 28), cmap='gray')
plt.show()
# 正解ラベルの表示
print('label:', t)

こちらは、ダウンロードしたMNIST画像の1つを、Jupyter Notebook上に表示して確認しています。一つ一つのコードについては、上記のコード内にコメントで記載しました。ここでは、Numpyのreshape()関数と、matplotlib.pyplotのimshow()関数、show()関数を用いています。numpyとmatplotlibは機械学習プログラミングでよく使いますので、特にNumpyについては勉強しておく必要があります。

Numpyについては、Chainer用の画像処理メモ(5)初めてのNumPy"import numpy as np"をご覧いただければ幸いですが、pythonで機械学習を行うためには必須事項ですので、ゼロから作るDeep Learningなどの本を読んで繰り返し写経して、ある程度しっかり勉強しておく必要があります。

後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードを記載しました。

Kerasが用意しているMNISTデータセットを用いる手順は上記でおしまいです。

初めての場合は、次は、とりあえず、(3)モデルの記述に進んでください。

keras.datasets.mnist.load_data()関数について

作成中

参考文献

初めてKerasプログラミングをやるときの超おすすめ本。

 

リンク

3_モデル設定_keras.1509917150.txt.gz · 最終更新: 2018/10/07 (外部編集)