2_データ準備_keras
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
2_データ準備_keras [2017/11/05] – [1. データセットの準備] adash333 | 2_データ準備_keras [2018/10/07] (現在) – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 50: | 行 50: | ||
Keras 2.0.9\\ | Keras 2.0.9\\ | ||
- | Keras2.0のインストール方法は[[windowsにkeras2.0をインストール]]をご覧下さい。 | + | Keras2.0のインストール方法は<wrap hi>[[windowsにkeras2.0をインストール]]</ |
- | このページは、[[(1)Kerasを使用するためのimport文]]の続きであり、今回は、MNISTのデータの準備・設定を行っていきます。 | + | このページは、<wrap hi>[[(1)Kerasを使用するためのimport文]]</ |
データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。 | データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。 | ||
- | オリジナルデータセットの準備については、後日、[[Keras2用自前データの準備]]に記載予定です。 | + | オリジナルデータセットの準備については、後日、<wrap hi>[[Keras2用自前データの準備]]</ |
===== 手順 ===== | ===== 手順 ===== | ||
行 122: | 行 122: | ||
手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。 | 手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。 | ||
- | ただ、画像のままではKerasでは読み込めません。そのため、画像を0~255の値をとる284個の数字が1列に並んだ配列に変換(reshape(60000, | + | ただ、画像のままでは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, | ||
+ | </ | ||
具体的には、今回、 | 具体的には、今回、 | ||
行 134: | 行 141: | ||
{{: | {{: | ||
+ | |||
+ | {{: | ||
xは、1x784のNumpy配列(各要素は0から1までの数値(dtype=float32))であり、tは正解ラベル(dtype=int32)となっています。 | xは、1x784のNumpy配列(各要素は0から1までの数値(dtype=float32))であり、tは正解ラベル(dtype=int32)となっています。 | ||
コードの解説に戻ります。\\ | コードの解説に戻ります。\\ | ||
- | 次は、train[0]の画像データをJupyter Notebookで可視化しています。 | + | 次は、x_train[0]の画像データをJupyter Notebookで可視化しています。 |
< | < | ||
- | # matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。 | + | # matplotlibを使ったグラフ描画結果がjupyter |
%matplotlib inline | %matplotlib inline | ||
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
# データの例示 | # データの例示 | ||
- | # trainデータセットの1行目を、画像データのNumpy配列(1x784)をx、正解ラベルをtとして取り出す | + | # x_trainデータセットの1行目、つまり、画像データのNumpy配列(1x784)をxとして取り出す |
- | x, t = train[0] | + | 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を用いて、 | # 1x784のNumpy配列xを、28x28のNumpy配列に変換後、matplotlibのpyplotを用いて、 | ||
# グレースケール画像として読み込み、Jupyter Notebook内で表示 | # グレースケール画像として読み込み、Jupyter Notebook内で表示 | ||
行 156: | 行 168: | ||
</ | </ | ||
- | こちらは、ダウンロードしたMNIST画像の1つを、Jupyter Notebook上に表示して確認しています。一つ一つのコードについては、上記のコード内にコメントで記載しました。ここでは、numpyのreshape()関数と、matplotlib.pyplotのimshow()関数、show()関数を用いています。numpyとmatplotlibは機械学習プログラミングでよく使いますので、特にNumpyについては勉強しておく必要があります。 | + | こちらは、ダウンロードしたMNIST画像の1つを、Jupyter Notebook上に表示して確認しています。一つ一つのコードについては、上記のコード内にコメントで記載しました。ここでは、Numpyのreshape()関数と、matplotlib.pyplotのimshow()関数、show()関数を用いています。numpyとmatplotlibは機械学習プログラミングでよく使いますので、特にNumpyについては勉強しておく必要があります。 |
- | Numpyについては、[[http:// | + | Numpyについては、[[http:// |
後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードを記載しました。 | 後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードを記載しました。 | ||
行 164: | 行 176: | ||
Kerasが用意しているMNISTデータセットを用いる手順は上記でおしまいです。 | Kerasが用意しているMNISTデータセットを用いる手順は上記でおしまいです。 | ||
- | <wrap hi> | ||
- | 初めての場合は、次は、とりあえず、</ | ||
- | </ | ||
- | (参考) | + | 初めての場合は、次は、とりあえず、< |
- | + | ||
- | one-hotエンコーディング について\\ | + | |
- | 2016-11-08 | + | |
- | Kerasによる多クラス分類(Iris)\\ | + | |
- | http:// | + | |
===== keras.datasets.mnist.load_data()関数について ===== | ===== keras.datasets.mnist.load_data()関数について ===== | ||
行 182: | 行 186: | ||
今回はそれにあたります(MNISTなんてグレースケールで十分)が、 | 今回はそれにあたります(MNISTなんてグレースケールで十分)が、 | ||
< | < | ||
- | train, test = mnist.get_mnist(withlabel=True, | + | from keras.datasets import mnist |
+ | |||
+ | (x_train, y_train), (x_test, y_test) | ||
</ | </ | ||
- | のように、引数に、withlabel=True, | + | のように、x_trainとx_testに、画像データをNumpy配列に変換済みのものを代入し、y_trainとy_testに対応する正解ラベルを代入します。 |
(2)もともとのデータセットがグレースケール画像のデータとなっています。 | (2)もともとのデータセットがグレースケール画像のデータとなっています。 | ||
Keras関連の関数については、公式マニュアルを読むのが一番です。日本語もあります!公式マニュアルが比較的読みやすいです。 | Keras関連の関数については、公式マニュアルを読むのが一番です。日本語もあります!公式マニュアルが比較的読みやすいです。 | ||
- | |||
https:// | 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をうまく使用すると計算スピードが速くなる)ので、正解ラベルもベクトルで表現しておくと都合がよいらしいです。コンピュータに効率良く計算させるために、ミニバッチ学習とか、プログラミング的には面倒なだけで意味不明なことをやっていたりするという噂を聞いたりしたことがあります(まだちゃんと理解していません、間違っていたらすみません、、、)。 | ||
+ | |||
+ | ちなみに、one-hotベクトルを、通常のラベルに戻すときには、Numpyのargmax()関数を利用して、one-hotベクトル(=配列)の、最大要素のインデックスを取り出して、数値に戻します。具体的な方法は、[[Keras2用自前データの準備]]に記載予定です。 | ||
+ | |||
+ | |||
+ | 2016-11-08 Kerasによる多クラス分類(Iris) | ||
+ | http:// | ||
===== 参考文献 ===== | ===== 参考文献 ===== | ||
初めてKerasプログラミングをやるときの超おすすめ本。\\ | 初めてKerasプログラミングをやるときの超おすすめ本。\\ |
2_データ準備_keras.txt · 最終更新: 2018/10/07 by 127.0.0.1