目次
機械学習とは
プログラミング無しで機械学習
機械学習プログラミング入門
初めてのKeras2.0
- KerasでFineTuning(作成中)
- pythonメモ(作成中)
以前のリビジョンの文書です
Keras2でMNIST目次
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をインストールをご覧下さい。
このページは、(2)データ準備(Keras)の続きであり、今回は、モデルの設定を行っていきます。
(2)データ準備(Keras)終了時の、以下のような状態から始めます。
以下のコードを入力して、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プログラミングをやるときの超おすすめ本。
Keras2でMNIST目次
Kerasプログラミングの全体図