2_データ準備_keras
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| 2_データ準備_keras [2017/11/04] – [(2)データの準備(Keras)] adash333 | 2_データ準備_keras [2018/10/07] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 10: | 行 10: | ||
| -[[(7)推測(Keras)]] | -[[(7)推測(Keras)]] | ||
| - | 最初に以下をコピペするだけですが、プログラムごとに、さらにimport文の追加が必要になる場合があります。 | + | 以下のような流れになります。Numpy配列についての知識が必要です。Numpy配列については、[[http:// |
| < | < | ||
| - | import keras | + | #2 データ準備(Keras) |
| - | from keras.models import Sequential | + | image_list = [] |
| - | from keras.layers import Dense, Dropout | + | label_list = [] |
| - | from keras.optimizers import RMSprop | + | # 画像を読み込み、リサイズ、正規化などを行い、 |
| - | from keras.utils import np_utils | + | # Numpy配列に変換し、「学習用データ」と「テストデータ」を作成する。 |
| + | X_train, X_test, y_train, y_test = train_test_split(image_list, | ||
| + | </ | ||
| - | from sklearn.model_selection import train_test_split | + | 自前データを利用する場合に最も大事な部分であり、最初は、かなりとっつきにくい部分となります。 |
| + | 具体的な方法について興味のある方は[[Keras2用自前データの準備]]をご覧ください。 | ||
| + | 今回は一番最初のチュートリアルなので、以下のようにKerasが用意しているMNISTデータセット(画像ではなく、既に数値の配列に変換されているもの)を用いて行います。 | ||
| + | (MNISTデータを用いるときしかできません。自前データを利用する場合は真似できない方法であり、あくまでチュートリアル用の方法です。) | ||
| - | import numpy as np | + | < |
| - | from PIL import Image | + | #2 データ準備(Keras)(MNISTの場合) |
| - | import os | + | # Kerasが用意しているMNISTデータセットをダウンロードしてx_train, |
| + | (x_train, y_train), (x_test, y_test) = mnist.load_data() | ||
| + | x_train = x_train.reshape(60000, | ||
| + | x_test = x_test.reshape(10000, | ||
| + | x_train = x_train.astype(' | ||
| + | x_test = x_test.astype(' | ||
| + | x_train /= 255 | ||
| + | x_test /= 255 | ||
| + | |||
| + | # convert class vectors to binary class matrices | ||
| + | y_train = keras.utils.to_categorical(y_train, | ||
| + | y_test = keras.utils.to_categorical(y_test, | ||
| </ | </ | ||
| - | 始めはかなりとっつきにくいimport文ですが、pythonの勉強をしていくにつれて、徐々に、慣れてきます。 | ||
| - | keras特有のもの以外のimport文については、以下のリンクをご覧ください。 | + | ===== 開発環境 ===== |
| + | Windows 8.1\\ | ||
| + | Anaconda \\ | ||
| + | Python 3.5\\ | ||
| + | Tensorflow 1.4\\ | ||
| + | Keras 2.0.9\\ | ||
| + | |||
| + | Keras2.0のインストール方法は< | ||
| + | |||
| + | このページは、< | ||
| + | |||
| + | データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。 | ||
| + | |||
| + | オリジナルデータセットの準備については、後日、< | ||
| + | ===== 手順 ===== | ||
| + | |||
| + | |||
| + | ==== 0. 前回終了時の画面 ==== | ||
| + | [[(1)Kerasを使用するためのimport文]]終了時の、以下のような状態から始めます。 | ||
| + | |||
| + | {{: | ||
| + | ==== 1. データセットの準備 ==== | ||
| + | 以下のコードを入力して、Shift + Enterを押します。最初は、MNISTの画像データなどがダウンロードされるので、時間がかかります。 | ||
| + | |||
| + | < | ||
| + | #2 データ準備(Keras)(MNISTの場合) | ||
| + | # Kerasが用意しているMNISTデータセットをダウンロードしてx_train, | ||
| + | # https:// | ||
| + | from keras.datasets | ||
| + | |||
| + | (x_train, y_train), (x_test, y_test) = mnist.load_data() | ||
| + | x_train = x_train.reshape(60000, | ||
| + | x_test = x_test.reshape(10000, | ||
| + | x_train = x_train.astype(' | ||
| + | x_test = x_test.astype(' | ||
| + | x_train /= 255 | ||
| + | x_test /= 255 | ||
| + | |||
| + | # convert class vectors to binary class matrices | ||
| + | y_train = keras.utils.to_categorical(y_train, | ||
| + | y_test = keras.utils.to_categorical(y_test, | ||
| + | |||
| + | # matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。 | ||
| + | %matplotlib inline | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | # データの例示 | ||
| + | x = x_train[0] | ||
| + | t = np.argmax(y_train[0]) | ||
| + | plt.imshow(x.reshape(28, | ||
| + | plt.show() | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | 以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from %%http:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | 順に解説していきます。 | ||
| + | |||
| + | < | ||
| + | #2 データ準備(Keras)(MNISTの場合) | ||
| + | # Kerasが用意しているMNISTデータセットをダウンロードしてx_train, | ||
| + | # https:// | ||
| + | from keras.datasets import mnist | ||
| + | |||
| + | (x_train, y_train), (x_test, y_test) = mnist.load_data() | ||
| + | </ | ||
| + | |||
| + | Kerasが用意しているkeras.datasetsから、手書き数字MNISTのデータをダウンロードして読み込みます。 | ||
| + | |||
| + | MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。\\ | ||
| + | http:// | ||
| + | ちなみに、よく言われているMNISTの元データのダウンロードついては、[[http:// | ||
| + | |||
| + | 手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。 | ||
| + | |||
| + | ただ、画像のままではKerasでは読み込めません。そのため、画像を0~255の値をとる784個の数字が1列に並んだ配列に変換(reshape(60000, | ||
| + | さらに、以下のコードで、正解ラベルをone hot ベクトルに変換したものを、y_trainに代入しています。 | ||
| + | |||
| + | < | ||
| + | # convert class vectors to binary class matrices | ||
| + | y_train = keras.utils.to_categorical(y_train, | ||
| + | y_test = keras.utils.to_categorical(y_test, | ||
| + | </ | ||
| + | |||
| + | 具体的には、今回、 | ||
| + | < | ||
| + | print(x) | ||
| + | print(t) | ||
| + | </ | ||
| + | と入力してShift + Enterで実行すると、以下のように表示されてます。 | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | xは、1x784の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, | ||
| + | plt.show() | ||
| + | # 正解ラベルの表示 | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | こちらは、ダウンロードしたMNIST画像の1つを、Jupyter Notebook上に表示して確認しています。一つ一つのコードについては、上記のコード内にコメントで記載しました。ここでは、Numpyのreshape()関数と、matplotlib.pyplotのimshow()関数、show()関数を用いています。numpyとmatplotlibは機械学習プログラミングでよく使いますので、特にNumpyについては勉強しておく必要があります。 | ||
| + | |||
| + | Numpyについては、[[http:// | ||
| + | |||
| + | 後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードを記載しました。 | ||
| + | |||
| + | Kerasが用意しているMNISTデータセットを用いる手順は上記でおしまいです。 | ||
| + | |||
| + | |||
| + | 初めての場合は、次は、とりあえず、< | ||
| + | |||
| + | ===== keras.datasets.mnist.load_data()関数について ===== | ||
| + | |||
| + | trainとtestに対応する2つのdatasetを返します。 | ||
| + | |||
| + | (1)グレースケール画像のデータをgetする場合\\ | ||
| + | 今回はそれにあたります(MNISTなんてグレースケールで十分)が、 | ||
| + | < | ||
| + | from keras.datasets import mnist | ||
| + | |||
| + | (x_train, y_train), (x_test, y_test) = mnist.load_data() | ||
| + | </ | ||
| + | のように、x_trainとx_testに、画像データをNumpy配列に変換済みのものを代入し、y_trainとy_testに対応する正解ラベルを代入します。 | ||
| + | |||
| + | (2)もともとのデータセットがグレースケール画像のデータとなっています。 | ||
| + | |||
| + | Keras関連の関数については、公式マニュアルを読むのが一番です。日本語もあります!公式マニュアルが比較的読みやすいです。 | ||
| + | |||
| + | https:// | ||
| + | {{: | ||
| + | |||
| + | |||
| + | ===== one-hotエンコーディング について ===== | ||
| + | たとえば、正解ラベルが0, | ||
| + | < | ||
| + | 0 => [1, 0, 0, 0, 0, 0, 0 ,0, 0, 0] | ||
| + | 1 => [0, 1, 0, 0, 0, 0, 0 ,0, 0, 0] | ||
| + | 2 => [0, 0, 1, 0, 0, 0, 0 ,0, 0, 0] | ||
| + | ... | ||
| + | 9 => [0, 0, 0, 0, 0, 0, 0 ,0, 0, 1] | ||
| + | </ | ||
| + | のように、数値をベクトルで表現することを、one-hot エンコーディングといいます。 | ||
| + | |||
| + | 機械学習の計算では、コンピュータに行列計算をさせることが多い(だからGPUをうまく使用すると計算スピードが速くなる)ので、正解ラベルもベクトルで表現しておくと都合がよいらしいです。コンピュータに効率良く計算させるために、ミニバッチ学習とか、プログラミング的には面倒なだけで意味不明なことをやっていたりするという噂を聞いたりしたことがあります(まだちゃんと理解していません、間違っていたらすみません、、、)。 | ||
| - | 機械学習で用いるpythonの”import xxx”まとめ\\ | + | ちなみに、one-hotベクトルを、通常のラベルに戻すときには、Numpyのargmax()関数を利用して、one-hotベクトル(=配列)の、最大要素のインデックスを取り出して、数値に戻します。具体的な方法は、[[Keras2用自前データの準備]]に記載予定です。 |
| - | 2017/ | + | |
| - | http:// | + | |
| + | 2016-11-08 Kerasによる多クラス分類(Iris) | ||
| + | http:// | ||
| ===== 参考文献 ===== | ===== 参考文献 ===== | ||
| 初めてKerasプログラミングをやるときの超おすすめ本。\\ | 初めてKerasプログラミングをやるときの超おすすめ本。\\ | ||
2_データ準備_keras.1509781231.txt.gz · 最終更新: 2018/10/07 (外部編集)
