2_データの準備・設定
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
2_データの準備・設定 [2017/11/03] – [1. データセットの準備] adash333 | 2_データの準備・設定 [2018/10/07] (現在) – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 4: | 行 4: | ||
[[Chainer2プログラミングの全体図]] | [[Chainer2プログラミングの全体図]] | ||
-[[(1)Chainer2を使用するためのimport文]] | -[[(1)Chainer2を使用するためのimport文]] | ||
- | -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] | + | -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] <wrap hi><= いまココ</ |
-[[(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: | ||
</ | </ | ||
- | 以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from http:// | + | 以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from %%http:// |
- | {{:pasted:20171019-230824.png}} | + | {{:pasted:20171103-211623.png}} |
順に解説していきます。 | 順に解説していきます。 | ||
行 84: | 行 83: | ||
MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。\\ | MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすいです。\\ | ||
- | http:// | + | http:// |
+ | ちなみに、よく言われているMNISTの元データのダウンロードついては、[[http:// | ||
手書き数字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という変数に代入しています。 | ただ、画像のままではChainerでは読み込めません。そのため、画像を0~255の値をとる284個の数字が1列に並んだ配列(ndim=1)に変換(さらに正規化といって全部255で割る)したものと、正解ラベルのセット(withlabel=True)に変換したものを、chainer.datasets.get_mnist()関数で呼び出して、trainとtestという変数に代入しています。 | ||
- | |||
> | > | ||
- | %%[[%%.234809284, | + | >%%[[%%.234809284, |
- | というように、左に入力値と右にその答え(ラベル値)がセットで入っています。 | + | >というように、左に入力値と右にその答え(ラベル値)がセットで入っています。 |
- | また、chainerではtrainで学習して、testで試してみて正解率を見ていく感じになります。 | + | >また、chainerではtrainで学習して、testで試してみて正解率を見ていく感じになります。\\ |
- | 出典: | + | 出典:[[https:// |
+ | 具体的には、今回、 | ||
< | < | ||
+ | x, t = train[0] | ||
+ | print(x) | ||
+ | print(t) | ||
+ | </ | ||
+ | と入力してShift + Enterで実行すると、以下のように表示されてます。 | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | ちなみに、 | ||
+ | < | ||
+ | print(train[0]) | ||
+ | </ | ||
+ | とすると、以下のように表示されて、train[0]は、1x784のNumpy配列(各要素は0から1までの数値(dtype=float32))と、正解ラベル(dtype=int32)のタプル(tuple)であることが分かります。 | ||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | 次は、train[0]の画像データをJupyter Notebookで可視化しています。 | ||
+ | |||
+ | < | ||
# matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。 | # matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします。 | ||
%matplotlib inline | %matplotlib inline | ||
行 104: | 行 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, | plt.imshow(x.reshape(28, | ||
plt.show() | plt.show() | ||
+ | # 正解ラベルの表示 | ||
print(' | print(' | ||
</ | </ | ||
+ | こちらは、ダウンロードしたMNIST画像の1つを、Jupyter Notebook上に表示して確認しています。一つ一つのコードについては、上記のコード内にコメントで記載しました。ここでは、numpyのreshape()関数と、matplotlib.pyplotのimshow()関数、show()関数を用いています。numpyとmatplotlibは機械学習プログラミングでよく使いますので、特にNumpyについては勉強しておく必要があります。 | ||
+ | Numpyについては、[[http:// | ||
+ | |||
+ | < | ||
+ | <iframe style=" | ||
+ | | ||
+ | <iframe style=" | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | 後半のコードは、特にMNISTのtrainingを行う際には不要ですが、データを読み込んだときに、読み込んだデータと元のデータとの整合性の検証は大事なことなので、このようなコードの記載があるのだと思われます。 | ||
Chainerが用意しているMNISTデータセットを用いる手順は上記でおしまいです。 | Chainerが用意しているMNISTデータセットを用いる手順は上記でおしまいです。 | ||
- | 初めての場合は、次は、とりあえず、[[(3)モデルの記述]]に進んでください。 | + | <wrap hi> |
+ | 初めての場合は、次は、とりあえず、</ | ||
+ | </ | ||
+ | ===== chainer.datasets.get_mnist関数について ===== | ||
- | ==== chainer.datasets.get_mnist関数について ==== | + | trainとtestに対応する2つのdatasetを返します。 |
- | あ | + | (1)グレースケール画像のデータをgetする場合\\ |
+ | 今回はそれにあたります(MNISTなんてグレースケールで十分)が、 | ||
+ | < | ||
+ | train, test = mnist.get_mnist(withlabel=True, | ||
+ | </ | ||
+ | のように、引数に、withlabel=True, | ||
- | Chainerについては、できれば、公式マニュアルを読むのが一番ですが、残念ながら英語です。日本発祥なのだから、マニュアルの日本語Versionもぜひ欲しいところなのですが、、、Kerasは日本語マニュアルがあるのに、、、 | + | (2)万が一、カラー画像としてデータをgetしたい場合\\ |
+ | < | ||
+ | train, test = mnist.get_mnist(withlabel=True, | ||
+ | </ | ||
+ | のように、引数に、withlabel=True, | ||
+ | |||
+ | Chainer関連の関数については、公式マニュアルを読むのが一番です。残念ながら英語ですが、それでも読むしかありません。日本発祥なのだから、マニュアルの日本語Versionもぜひ欲しいところなのですが、、、Kerasは日本語マニュアルがあるのに、、、 | ||
Docs » Chainer Reference Manual » Dataset examples » chainer.datasets.get_mnist\\ | Docs » Chainer Reference Manual » Dataset examples » chainer.datasets.get_mnist\\ | ||
行 127: | 行 179: | ||
{{: | {{: | ||
- | ==== import matplotlib.pyplot as pltについて ==== | + | ===== Numpy配列について ===== |
+ | |||
+ | よろしければ、以下をご覧ください。 | ||
+ | |||
+ | Chainer用の画像処理メモ(5)初めてのNumPy" | ||
+ | 2017/ | ||
+ | http:// | ||
+ | |||
+ | Chainer用の画像処理メモ(6)画像をNumpy配列に変換\\ | ||
+ | 2017/ | ||
+ | http:// | ||
+ | |||
+ | ===== import matplotlib.pyplot as pltについて | ||
かなり面倒ですが、コードを理解するためには、import文の役割を一つずつ調べていくのが王道です。 | かなり面倒ですが、コードを理解するためには、import文の役割を一つずつ調べていくのが王道です。 | ||
- | Matplotlibは、 | + | 機械学習プログラミングで使用することが多いimport文について、以下にまとめていく予定ですので、ぜひご覧ください。 |
+ | |||
+ | 機械学習で用いるpythonの”import xxx”まとめ\\ | ||
+ | 2017/10/25 2017/ | ||
+ | http:// | ||
- | 作成中 | + | Matplotlibについては、以下の本の第4章「Matplotlibでグラフを描画しよう」がおすすめですが、さしあたり、[[https:// |
+ | < | ||
+ | <iframe style=" | ||
+ | </ | ||
===== 参考文献 ===== | ===== 参考文献 ===== | ||
行 165: | 行 236: | ||
https:// | https:// | ||
===== リンク ===== | ===== リンク ===== | ||
- | <ChainerでMNIST目次> | + | |
- | [[Chainer2プログラミングの全体図|(0)Chainer2プログラミングの全体図]]\\ | + | 次 [[(3)モデルの記述|(3)モデルの記述(Chainer)]] |
- | [[(1)Chainer2を使用するためのimport文]]\\ | + | |
- | [[(2)データの準備・設定|(2)tuple_datasetによるデータの準備・設定]]\\ | + | 前 [[(1)Chainer2を使用するためのimport文]] |
- | [[(3)モデルの記述]]\\ | + | |
- | [[(4)モデルと最適化アルゴリズムの設定]]\\ | + | |
- | [[(5)学習(Trainerを利用しない場合)]]\\ | + | <wrap hi> |
- | [[(6)結果の出力]]\\ | + | [[Chainer2プログラミングの全体図]] |
+ | -[[(1)Chainer2を使用するためのimport文]] | ||
+ | -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] <wrap hi><= いまココ</ | ||
+ | -[[(3)モデルの記述|(3)モデルの記述(Chainer)]] | ||
+ | -[[(4)モデルと最適化アルゴリズムの設定|(4)モデルと最適化アルゴリズムの設定(Chainer)]] | ||
+ | -[[(5)学習と結果の出力(Chainer)]] | ||
+ | -[[(6)結果の出力|(6)学習結果のパラメータの保存(Chainer)]] | ||
+ | -[[(7)推測|(7)推測(Chainer)]] |
2_データの準備・設定.1509708828.txt.gz · 最終更新: 2018/10/07 (外部編集)