2_データの準備・設定

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
2_データの準備・設定 [2017/11/03]
adash333 [1. データセットの準備]
2_データの準備・設定 [2018/10/07] (現在)
ライン 4: ライン 4:
 [[Chainer2プログラミングの全体図]] [[Chainer2プログラミングの全体図]]
   -[[(1)Chainer2を使用するためのimport文]]   -[[(1)Chainer2を使用するためのimport文]]
-  -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]]+  -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] <wrap hi><= いまココ</​wrap>​
   -[[(3)モデルの記述|(3)モデルの記述(Chainer)]]   -[[(3)モデルの記述|(3)モデルの記述(Chainer)]]
   -[[(4)モデルと最適化アルゴリズムの設定|(4)モデルと最適化アルゴリズムの設定(Chainer)]]   -[[(4)モデルと最適化アルゴリズムの設定|(4)モデルと最適化アルゴリズムの設定(Chainer)]]
ライン 46: ライン 46:
 [[(1)Chainer2を使用するためのimport文]]終了時の、以下のような状態から始めます。 [[(1)Chainer2を使用するためのimport文]]終了時の、以下のような状態から始めます。
  
-{{:pasted:20171019-230416.png}} +{{:pasted:20171103-205859.png?400|}}
 ==== 1. データセットの準備 ==== ==== 1. データセットの準備 ====
 以下のコードを入力して、Shift + Enterを押します。最初は、MNISTの画像データなどがダウンロードされるので、時間がかかります。 以下のコードを入力して、Shift + Enterを押します。最初は、MNISTの画像データなどがダウンロードされるので、時間がかかります。
ライン 68: ライン 67:
 </​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:20171019-230824.png}}+{{:pasted:20171103-211623.png}}
  
 順に解説していきます。 順に解説していきます。
ライン 83: ライン 82:
 Chainerが用意しているchainer.datasetsから、手書き数字MNISTのデータをダウンロードして読み込みます。 Chainerが用意しているchainer.datasetsから、手書き数字MNISTのデータをダウンロードして読み込みます。
  
 +MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。\\
 +http://​exceldeeplearning.blog.jp/​archives/​1411297.html\\
 +ちなみに、よく言われているMNISTの元データのダウンロードついては、[[http://​twosquirrel.mints.ne.jp/?​p=20277|こちら]]をご覧いただければと思います。
  
 +手書き数字MNISTは、本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。この画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。
  
 +ただ、画像のままではChainerでは読み込めません。そのため、画像を0~255の値をとる284個の数字が1列に並んだ配列(ndim=1)に変換(さらに正規化といって全部255で割る)したものと、正解ラベルのセット(withlabel=True)に変換したものを、chainer.datasets.get_mnist()関数で呼び出して、trainとtestという変数に代入しています。
 +
 +>​なかがどんなカタチになっているかというと、一つの行(train[0])に
 +>​%%[[%%.234809284,​ .324039284, .34809382 …. .04843098%%]%%,​ 3%%]%%
 +>​というように、左に入力値と右にその答え(ラベル値)がセットで入っています。
 +>​また、chainerではtrainで学習して、testで試してみて正解率を見ていく感じになります。\\
 +出典:​[[https://​qiita.com/​tommyfms2/​items/​a2f23acbf515fba3495b|chainer 1.11.0以降のmnistを解説]]
 +
 +具体的には、今回、
 <​code>​ <​code>​
 +x, t = train[0]
 +print(x)
 +print(t)
 +</​code>​
 +と入力してShift + Enterで実行すると、以下のように表示されてます。
 +{{:​pasted:​20171103-213151.png}}
  
 +{{:​pasted:​20171103-213221.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}}
 +
 +
 +次は、train[0]の画像データをJupyter Notebookで可視化しています。
 +
 +<​code>​
 # matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。 # matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。
 %matplotlib inline %matplotlib inline
ライン 92: ライン 125:
  
 # データの例示 # データの例示
 +# trainデータセットの1行目を、画像データのNumpy配列(1x784)をx、正解ラベルをtとして取り出す
 x, t = train[0] x, t = train[0]
 +# 1x784のNumpy配列xを、28x28のNumpy配列に変換後、matplotlibのpyplotを用いて、
 +# グレースケール画像として読み込み、Jupyter Notebook内で表示
 plt.imshow(x.reshape(28,​ 28), cmap='​gray'​) plt.imshow(x.reshape(28,​ 28), cmap='​gray'​)
 plt.show() plt.show()
 +# 正解ラベルの表示
 print('​label:',​ t) print('​label:',​ t)
 </​code>​ </​code>​
  
 +こちらは、ダウンロードした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つの本などで、ある程度しっかり勉強しておく必要があります。
 +
 +<​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=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>​
 +
 +
 +</​html>​
 +
 +
 +後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードの記載があるのだと思われます。
  
 Chainerが用意しているMNISTデータセットを用いる手順は上記でおしまいです。 Chainerが用意しているMNISTデータセットを用いる手順は上記でおしまいです。
  
-初めての場合は、次は、とりあえず、[[(3)モデルの記述]]に進んでください。+<wrap hi> 
 +初めての場合は、次は、とりあえず、</​wrap>​[[(3)モデルの記述]]<wrap hi>に進んでください。 
 +</​wrap>​
  
 +===== chainer.datasets.get_mnist関数について =====
  
-==== chainer.datasets.get_mnist関数について ====+trainとtest対応する2のdatasetを返します。
  
-+(1)グレースケール画像のデータをgetする場合\\ 
 +今回はそれにたります(MNISTなんてグレースケールで十分)が、 
 +<​code>​ 
 +train, test = mnist.get_mnist(withlabel=True,​ ndim=1) 
 +</​code>​ 
 +のように、引数に、withlabel=True,​ ndim=1と入れます。 
 + 
 +(2)万が一、カラー画像としてデータをgetしたい場合\\ 
 +<​code>​ 
 +train, test = mnist.get_mnist(withlabel=True,​ ndim=3, rgb_format=True) 
 +</​code>​ 
 +のように、引数に、withlabel=True,​ ndim=1, rgb_format=Trueと入れます。
  
-Chainerについては、できれば、公式マニュアルを読むのが一番ですが、残念ながら英語です。日本発祥なのだから、マニュアルの日本語Versionもぜひ欲しいところなのですが、、、Kerasは日本語マニュアルがあるのに、、、+Chainer関連の関数については、公式マニュアルを読むのが一番です残念ながら英語ですが、それでも読むしかありません。日本発祥なのだから、マニュアルの日本語Versionもぜひ欲しいところなのですが、、、Kerasは日本語マニュアルがあるのに、、、
  
 Docs » Chainer Reference Manual » Dataset examples » chainer.datasets.get_mnist\\ Docs » Chainer Reference Manual » Dataset examples » chainer.datasets.get_mnist\\
ライン 115: ライン 179:
 {{:​pasted:​20171103-185942.png}} {{:​pasted:​20171103-185942.png}}
  
-==== import matplotlib.pyplot as pltについて ====+===== Numpy配列について ===== 
 + 
 +よろしければ、以下をご覧ください。 
 + 
 +Chainer用の画像処理メモ(5)初めてのNumPy"​import numpy as np"​\\ 
 +2017/​10/​22\\ 
 +http://​twosquirrel.mints.ne.jp/?​p=20209 
 + 
 +Chainer用の画像処理メモ(6)画像をNumpy配列に変換\\ 
 +2017/​10/​23\\ 
 +http://​twosquirrel.mints.ne.jp/?​p=20209 
 + 
 +===== import matplotlib.pyplot as pltについて ​=====
  
 かなり面倒ですが、コードを理解するためには、import文の役割を一つずつ調べていくのが王道です。 かなり面倒ですが、コードを理解するためには、import文の役割を一つずつ調べていくのが王道です。
  
-Matplotlibは+機械学習プログラミングで使用することが多いimport文について以下にまとめていく予定ですので、ぜひご覧ください。 
 + 
 +機械学習で用いるpythonの”import xxx”まとめ\\ 
 +2017/10/25 2017/​10/​28\\ 
 +http://​twosquirrel.mints.ne.jp/?​p=20344
  
-作成中+Matplotlibについては、以下の本の第4章「Matplotlibでグラフを描画しよう」がおすすめですが、さしあたり、[[https://​qiita.com/​Tatejimaru137/​items/​44646c9bb3799768fa81|matplotlibで画像を連続的に表示する方法メモ]]や[[http://​oikakeru.hateblo.jp/​entry/​2017/​03/​30/​150842|Matplotlibで画像を表示してみるetc(その1)]]が参考になります。matplotlib.pyplotで画像を表示するために、numpyとかPIL(pillow)とかいきなり出てきますので、その都度、[[http://​twosquirrel.mints.ne.jp/?​p=20344|機械学習で用いるpythonの”import xxx”まとめ]]で該当部分をチェックしてもよいとは思います。
  
 +<​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=B075F3CHZ4&​linkId=2d818cc48f5ec3d86ce1430f996e8124"></​iframe>​
 +</​html>​
  
 ===== 参考文献 ===== ===== 参考文献 =====
ライン 153: ライン 236:
 https://​qiita.com/​tommyfms2/​items/​c3fa0cb258c17468cb30 https://​qiita.com/​tommyfms2/​items/​c3fa0cb258c17468cb30
 ===== リンク ===== ===== リンク =====
-<ChainerでMNIST目次>​\\ + 
-[[Chainer2プログラミングの全体図|(0)Chainer2プログラミングの全体図]]\\ +次 [[(3)モデルの記述|(3)モデルの記述(Chainer)]] 
-[[(1)Chainer2を使用するためのimport文]]\\ + 
-[[(2)データの準備・設定|(2)tuple_datasetによるデータの準備・設定]]\\ +前 [[(1)Chainer2を使用するためのimport文]] 
-[[(3)モデルの記述]]\\ + 
-[[(4)モデルと最適化アルゴリズムの設定]]\\ + 
-[[(5)学習(Trainerを利用しない場合)]]\\ +<wrap hi>​Chainer2でMNIST目次</wrap>\\ 
-[[(6)結果の出力]]\\+[[Chainer2プログラミングの全体図]] 
 +  -[[(1)Chainer2を使用するためのimport文]] 
 +  -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] <wrap hi><= いまココ</​wrap>​ 
 +  -[[(3)モデルの記述|(3)モデルの記述(Chainer)]] 
 +  -[[(4)モデルと最適化アルゴリズムの設定|(4)モデルと最適化アルゴリズムの設定(Chainer)]] 
 +  -[[(5)学習と結果の出力(Chainer)]] 
 +  -[[(6)結果の出力|(6)学習結果のパラメータの保存(Chainer)]] 
 +  -[[(7)推測|(7)推測(Chainer)]]

2_データの準備・設定.1509707116.txt.gz · 最終更新: 2018/10/07 (外部編集)