ユーザ用ツール

サイト用ツール


2_データ準備_keras

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
2_データ準備_keras [2017/11/05] – [(2)データの準備(Keras)] adash3332_データ準備_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をインストール]]</wrap>をご覧下さい。
  
-このページは、[[(1)Kerasを使用するためのimport文]]の続きであり、今回は、MNISTのデータの準備・設定を行っていきます。+このページは、<wrap hi>[[(1)Kerasを使用するためのimport文]]</wrap>の続きであり、今回は、MNISTのデータの準備・設定を行っていきます。
  
 データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。 データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。
  
-オリジナルデータセットの準備については、後日、[[Keras2用自前データの準備]]に記載予定です。+オリジナルデータセットの準備については、後日、<wrap hi>[[Keras2用自前データの準備]]</wrap>に記載予定です。
 ===== 手順 ===== ===== 手順 =====
  
行 68: 行 68:
  
 <code> <code>
-from chainer.datasets import 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_trainy_train), (x_test, y_test) = mnist.load_data(
-traintest = mnist.get_mnist(withlabel=Truendim=1)+x_train x_train.reshape(60000784) 
 +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を使ったグラフ描画結果がnotebook内に表示されるようにします。
行 78: 行 90:
  
 # データの例示 # データの例示
-xt = train[0]+= x_train[0] 
 +t = np.argmax(y_train[0])
 plt.imshow(x.reshape(28, 28), cmap='gray') plt.imshow(x.reshape(28, 28), cmap='gray')
 plt.show() plt.show()
行 84: 行 97:
 </code> </code>
  
-以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from %%http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...%%」といった感じの文字が4行続くと思い。)+以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from %%http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...%%」といった感じの文字が4行続くかもしれせん。)
  
-{{:pasted:20171103-211623.png}}+{{:pasted:20171106-051156.png}} 
 + 
 +{{:pasted:20171106-051215.png}}
  
 順に解説していきます。 順に解説していきます。
  
 <code> <code>
-from chainer.datasets import 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_trainy_train), (x_test, y_test) = mnist.load_data()
-traintest = mnist.get_mnist(withlabel=True, ndim=1)+
 </code> </code>
  
-Chainerが用意しているchainer.datasetsから、手書き数字MNISTのデータをダウンロードして読み込みます。+Kerasが用意しているkeras.datasetsから、手書き数字MNISTのデータをダウンロードして読み込みます。
  
 MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。\\ MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。\\
 http://exceldeeplearning.blog.jp/archives/1411297.html\\ http://exceldeeplearning.blog.jp/archives/1411297.html\\
-ちなみに、よく言われているMNISTの元データのダウンロードついては、[[http://twosquirrel.mints.ne.jp/?p=20277|こちら]]をご覧いただければと思います。+ちなみに、よく言われているMNISTの元データのダウンロードついては、[[http://twosquirrel.mints.ne.jp/?p=20277|こちら]]をご覧いただければと思います。ただ、上記サイトのデータも、画像が既に数値の配列に変換されたものであるので、画像をダウンロードしたい場合は、サンプル数などは少し異なりますが、[[http://twosquirrel.mints.ne.jp/?p=20494|手書き数字MNISTのjpgファイル群をダウンロードする方法]]をご覧頂ければ幸いです。
  
 手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。 手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。
  
-ただ、画像のままではChainerでは読み込めません。そのため、画像を0~255の値をとる284個の数字が1列に並んだ配列(ndim=1)に変換(さらに正規化といって全部255で割る)したもの、正解ラベルのセッ(withlabel=True)に変換したものを、chainer.datasets.get_mnist()関数で呼び出して、trainとtestという変数に代入しています。+ただ、画像のままではKerasでは読み込めません。そのため、画像を0~255の値をとる784個の数字が1列に並んだ配列に変換(reshape(60000, 784))し、さらに正規化といって全部255で割ったたものをx_trainに代入しています。\\ 
 +さらに、以下のコードで、正解ラベルをone hot ベクに変換したものを、y_trainに代入しています。
  
->なかがどんなカタチになっているかというと、一つの行(train[0])に +<code
->%%[[%%.234809284, .324039284, .34809382 ….04843098%%]%%3%%]%% +# convert class vectors to binary class matrices 
->というように、左に入力値と右にその答え(ラベル値)がセットで入っています。 +y_train = keras.utils.to_categorical(y_train10) 
->また、chainerではtrainで学習して、testで試してみて正解率を見ていく感じになります。\\ +y_test = keras.utils.to_categorical(y_test10
-出典:[[https://qiita.com/tommyfms2/items/a2f23acbf515fba3495b|chainer 1.11.0以降のmnistを解説]]+</code>
  
 具体的には、今回、 具体的には、今回、
 <code> <code>
-x, t = train[0] 
 print(x) print(x)
 print(t) print(t)
 </code> </code>
 と入力してShift + Enterで実行すると、以下のように表示されてます。 と入力してShift + Enterで実行すると、以下のように表示されてます。
-{{:pasted:20171103-213151.png}} 
  
-{{:pasted:20171103-213221.png}}+{{:pasted:20171106-053503.png}}
  
-ちなみに、 +{{:pasted:20171106-053530.png}}
-<code> +
-print(train[0]) +
-</code> +
-とすると、以下のように表示されて、train[0]は、1x784のNumpy配列(各要素は0から1までの数値(dtype=float32))と、正解ラベル(dtype=int32)のタプル(tuple)であることが分かります。 +
-{{:pasted:20171103-213448.png}}+
  
-{{:pasted:20171103-213512.png}}+{{:pasted:20171106-054412.png}}
  
 +xは、1x784のNumpy配列(各要素は0から1までの数値(dtype=float32))であり、tは正解ラベル(dtype=int32)となっています。
  
-次は、train[0]の画像データをJupyter Notebookで可視化しています。+コードの解説に戻ります。\\ 
 +次は、x_train[0]の画像データをJupyter Notebookで可視化しています。
  
 <code> <code>
-# matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。+# matplotlibを使ったグラフ描画結果がjupyter notebook内に表示されるようにす
 %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内で表示
行 152: 行 168:
 </code> </code>
  
-こちらは、ダウンロードした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://twosquirrel.mints.ne.jp/?p=20153|Chainer用の画像処理メモ(5)初めてのNumPy"import numpy as np"]]をご覧いただければ幸いですが、以下2つの本などで、ある程度しっかり勉強しておく必要があります。+Numpyについては、[[http://twosquirrel.mints.ne.jp/?p=20153|Chainer用の画像処理メモ(5)初めてのNumPy"import numpy as np"]]をご覧いただければ幸いですが、pythonで機械学習を行うためには必須事項ですで、[[http://amzn.to/2zeJ7Lz|ゼロから作るDeep Learning]]などの本を読ん繰り返し写経して、ある程度しっかり勉強しておく必要があります。
  
-<html> +後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードを記載しました。
-<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=560f10e512d4dcc99644bbfabcb18cd3"></iframe> +
-&nbsp; +
-<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=4274221075&linkId=e362b0741ce31d467f246f2a47709906"></iframe>+
  
 +Kerasが用意しているMNISTデータセットを用いる手順は上記でおしまいです。
  
-</html> 
  
 +初めての場合は、次は、とりあえず、<wrap hi>[[(3)モデル設定(Keras)]]</wrap>に進んでください。
 +
 +===== keras.datasets.mnist.load_data()関数について =====
 +
 +trainとtestに対応する2つのdatasetを返します。
 +
 +(1)グレースケール画像のデータをgetする場合\\
 +今回はそれにあたります(MNISTなんてグレースケールで十分)が、
 +<code>
 +from keras.datasets import mnist
 +
 +(x_train, y_train), (x_test, y_test) = mnist.load_data()
 +</code>
 +のように、x_trainとx_testに、画像データをNumpy配列に変換済みのものを代入し、y_trainとy_testに対応する正解ラベルを代入します。
 +
 +(2)もともとのデータセットがグレースケール画像のデータとなっています。
 +
 +Keras関連の関数については、公式マニュアルを読むのが一番です。日本語もあります!公式マニュアルが比較的読みやすいです。
 +
 +https://keras.io/ja/datasets/#mnist\\
 +{{:pasted:20171106-052812.png}}
 +
 +
 +===== one-hotエンコーディング について =====
 +たとえば、正解ラベルが0,1,2, ..., 9 と10個あったときに、
 +<code>
 +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]
 +</code>
 +のように、数値をベクトルで表現することを、one-hot エンコーディングといいます。
  
-後半のコードは、特MNISTのtrainingを行う際には不要ですが、ータを読み込んだときに、読み込んだデータ元のデータとの整合性の検証大事ことので、のよなコードの記載があるのだと思われます。+機械学習計算では、ンピュに行列計算をさせることが多い(だからGPUをまく使用ると計算スピード速くなる)ので正解ラベルもベクトルで表現しておくと都合がよいらしいです。コンピュータに効率良く計算させるために、ミニバッチ学習か、プログラミング的に面倒だけで意味不明なことをやっていたりするとい噂を聞いたりしたことがあります(まちゃん理解していせん、間違っていたらみません、、、)
  
-ChainerがしているMNISTータセ用いる手順は上記でおしまです。+ちなみに、one-hotベクトルを、通常のラベルに戻すときには、Numpyのargmax()関数を利用して、one-hotベクトル(=配列)の、最大要素のインデックス取り出して、数値に戻します。具体的な方法は、[[Keras2用自前データの準備]]に記載予定です。
  
-<wrap hi> 
-初めての場合は、次は、とりあえず、</wrap>[[(3)モデルの記述]]<wrap hi>に進んでください。 
-</wrap> 
  
 +2016-11-08 Kerasによる多クラス分類(Iris)
 +http://aidiary.hatenablog.com/entry/20161108/1478609028
 ===== 参考文献 ===== ===== 参考文献 =====
 初めてKerasプログラミングをやるときの超おすすめ本。\\ 初めてKerasプログラミングをやるときの超おすすめ本。\\

2_データ準備_keras.1509912455.txt.gz · 最終更新: 2018/10/07 (外部編集)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki