−目次
文書の過去の版を表示しています。
(2)データの準備(Keras)
Keras2でMNIST目次
Kerasプログラミングの全体図
- (2)データ準備(Keras) ⇐ いまココ
以下のような流れになります。Numpy配列についての知識が必要です。Numpy配列については、Chainer用の画像処理メモ(5)初めてのNumPy"import numpy as np"とChainer用の画像処理メモ(6)画像をNumpy配列に変換をご覧いただければ幸いです。
#2 データ準備(Keras) image_list = [] label_list = [] # 画像を読み込み、リサイズ、正規化などを行い、 # Numpy配列に変換し、「学習用データ」と「テストデータ」を作成する。 X_train, X_test, y_train, y_test = train_test_split(image_list, label_list, test_size=0.33, random_state=111)
自前データを利用する場合に最も大事な部分であり、最初は、かなりとっつきにくい部分となります。
具体的な方法について興味のある方はKeras2用自前データの準備をご覧ください。
今回は一番最初のチュートリアルなので、以下のようにKerasが用意しているMNISTデータセット(画像ではなく、既に数値の配列に変換されているもの)を用いて行います。
(MNISTデータを用いるときしかできません。自前データを利用する場合は真似できない方法であり、あくまでチュートリアル用の方法です。)
#2 データ準備(Keras)(MNISTの場合) # Kerasが用意しているMNISTデータセットをダウンロードしてx_train, y_train, x_test, y_testに代入 (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)
開発環境
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に代入し、正解ラベルをに変換したものを、chainer.datasets.get_mnist()関数で呼び出して、trainとtestという変数に代入しています。
なかがどんなカタチになっているかというと、一つの行(train[0])に
[[.234809284, .324039284, .34809382 …. .04843098], 3]
というように、左に入力値と右にその答え(ラベル値)がセットで入っています。
また、chainerではtrainで学習して、testで試してみて正解率を見ていく感じになります。
具体的には、今回、
x, t = train[0] print(x) print(t)
と入力してShift + Enterで実行すると、以下のように表示されてます。
ちなみに、
print(train[0])
とすると、以下のように表示されて、train[0]は、1×784のNumpy配列(各要素は0から1までの数値(dtype=float32))と、正解ラベル(dtype=int32)のタプル(tuple)であることが分かります。
次は、train[0]の画像データをJupyter Notebookで可視化しています。
# matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。 %matplotlib inline import matplotlib.pyplot as plt # データの例示 # trainデータセットの1行目を、画像データのNumpy配列(1x784)をx、正解ラベルをtとして取り出す x, t = 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"をご覧いただければ幸いですが、以下の2つの本などで、ある程度しっかり勉強しておく必要があります。
後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードを記載しました。
Kerasが用意しているMNISTデータセットを用いる手順は上記でおしまいです。
初めての場合は、次は、とりあえず、(3)モデルの記述に進んでください。
(参考)
one-hotエンコーディング について
2016-11-08
Kerasによる多クラス分類(Iris)
http://aidiary.hatenablog.com/entry/20161108/1478609028
keras.datasets.mnist.load_data()関数について
trainとtestに対応する2つのdatasetを返します。
(1)グレースケール画像のデータをgetする場合
今回はそれにあたります(MNISTなんてグレースケールで十分)が、
train, test = mnist.get_mnist(withlabel=True, ndim=1)
のように、引数に、withlabel=True, ndim=1と入れます。
(2)もともとのデータセットがグレースケール画像のデータとなっています。
Keras関連の関数については、公式マニュアルを読むのが一番です。日本語もあります!公式マニュアルが比較的読みやすいです。
参考文献
初めてKerasプログラミングをやるときの超おすすめ本。
<html>
<iframe style=“width:120px;height:240px;” marginwidth=“0” marginheight=“0” scrolling=“no” frameborder=“0” src=“rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=twosquirrel-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=4873117585&linkId=13a7db2c19cc5f40d6ab48906de8abd1”></iframe>
<iframe style=“width:120px;height:240px;” marginwidth=“0” marginheight=“0” scrolling=“no” frameborder=“0” src=“rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=twosquirrel-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=4839962510&linkId=d722909965b5eab4196d370757843f6f”></iframe>
</html>
リンク
Keras2でMNIST目次
Kerasプログラミングの全体図