ユーザ用ツール

サイト用ツール


3_モデル設定_keras

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
3_モデル設定_keras [2017/11/05] – [0. 前回終了時の画面] adash3333_モデル設定_keras [2018/10/07] (現在) – 外部編集 127.0.0.1
行 41: 行 41:
 Keras2.0のインストール方法は[[windowsにkeras2.0をインストール]]をご覧下さい。 Keras2.0のインストール方法は[[windowsにkeras2.0をインストール]]をご覧下さい。
  
-このページは、[[(1)Kerasを使用するためのimport文]]の続きであり、今回は、MNISTのータ準備・設定を行っていきます。+このページは、[[(2)データ準備(Keras)]]の続きであり、今回は、の設定を行っていきます。
  
-データの準備が難しいところなのですが、今回は、最初なので、Kerasであらかじめ用意されているMNISTデータセットを利用します。 
- 
-オリジナルデータセットの準備については、後日、[[Keras2用自前データの準備]]に記載予定です。 
 ===== 手順 ===== ===== 手順 =====
  
行 53: 行 50:
  
 {{:pasted:20171106-051215.png}} {{:pasted:20171106-051215.png}}
-==== 1. データセット準備 ==== +==== 1. 設定 ==== 
-以下のコードを入力して、Shift + Enterを押します。最初は、MNISTの画像データなどがダウンロードされるので、時間がかかります。+以下のコードを入力して、Shift + Enterを押します。
  
 <code> <code>
-#ータ準備(Keras)(MNISTの場合+#3 モル設定(Keras) 
-Kerasが用意しているMNISTデータセットをダウンロードしてx_train, y_train, x_test, y_testに代入 +batch_size = 128 
-https://keras.io/ja/datasets/ を参照 +num_classes = 10 
-from keras.datasets import mnist+epochs = 20 
 +epochs = 3
  
-(x_train, y_train)(x_testy_test) mnist.load_data() +# モデルの記述 
-x_train = x_train.reshape(60000, 784+model = Sequential() 
-x_test = x_test.reshape(10000784+model.add(Dense(512activation='relu', input_shape=(784,))
-x_train = x_train.astype('float32'+model.add(Dropout(0.2)
-x_test = x_test.astype('float32') +model.add(Dense(512activation='relu')
-x_train /= 255 +model.add(Dropout(0.2)
-x_test /= 255+model.add(Dense(10, activation='softmax'))
  
-# convert class vectors to binary class matrices +model.summary()
-y_train = keras.utils.to_categorical(y_train, 10) +
-y_test = keras.utils.to_categorical(y_test, 10)+
  
-matplotlib使ったグラフ描画結果がnotebook内に表示されるようにします。 +損失関数など設定 
-%matplotlib inline +model.compile(loss='categorical_crossentropy', 
-import matplotlib.pyplot as plt +              optimizer=RMSprop(), 
- +              metrics=['accuracy'])
-# データの例示 +
-x = x_train[0] +
-t = np.argmax(y_train[0]) +
-plt.imshow(x.reshape(28, 28), cmap='gray') +
-plt.show() +
-print('label:', t)+
 </code> </code>
  
-以下のような画面になります。(以下の画面は、2回目以降の画面となります。最初は、「Downloading from %%http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...%%」といった感じの文字が4行続くかもしれません。)+以下のような画面になります。
  
-{{:pasted:20171106-051156.png}}+{{:pasted:20171106-063744.png}}
  
-{{:pasted:20171106-051215.png}}+{{:pasted:20171106-063759.png}}
  
 順に解説していきます。 順に解説していきます。
  
 <code> <code>
-#ータ準備(Keras)(MNISTの場合+#3 モル設定(Keras) 
-Kerasが用意しているMNISTデータセットをダウンロードしてx_train, y_train, x_test, y_testに代入 +batch_size = 128 
-https://keras.io/ja/datasets/ を参照 +num_classes = 10 
-from keras.datasets import mnist +epochs = 20 
- +epochs 3
-(x_train, y_train), (x_test, y_test) mnist.load_data()+
 </code> </code>
  
-Kerasが用意しているkeras.datasetsから、手書き数字MNISTダウンロードて読み込みます。+batch_size, epochsなどの数値を設定ます。epochsは、学習を繰り返す回数であり、回数が少なすぎても、多すぎても微妙と言われています(参考:過学習、early stopping)。今回のコードの場合、適切なepoch数についてはわりませんが、学習にかかる時間について記載します。ノートパソコンだと、1 epochあたり32秒くいかかるので今回チュトリアルでは、epoch数かなり少ない3回とました。GPUを積んだデスクトップパソコンだと、1 epochあたり2秒とかなので、epoch数は20回に設定すればよいと思います。
  
-MNISTとは何か、またこれから何をやろうとしているのかについては、以下のサイトが非常に分かりやすです。\\ +batch_sizeについては、まだよく分かっていないので、今後勉強て内容理解できたら、こちらに追加記載させていただいます。
-http://exceldeeplearning.blog.jp/archives/1411297.html\\ +
-みに、よく言われてるMNISTの元データのダウンロードついては、[[http://twosquirrel.mints.ne.jp/?p=20277|こちら]]をご覧いただければと思います。ただ、上記サイトのデータも、画像が既に数値の配列に変換されたものであるので、画像をダウンロードしたい場合はサンプル数などは少異なります、[[http://twosquirrel.mints.ne.jp/?p=20494|手書き数字MNISTのjpgファイル群をダウンロードする方法]]をご覧頂ければ幸いす。 +
- +
-手書数字MNISTは本来は28x28pixelのグレースケールの画像と、それが何の数字であるかの正解ラベルのセットです。の画像と正解ラベルのセットが、training用の6万セット、test用の1万セットとなっています。 +
- +
-ただ、画像のままではKerasでは読み込めません。そのめ、画像を0~255の値をる284個の数字が1列に並んだ配列に変換(reshape(60000, 784))し、さらに正規化といって全部255で割ったたものをx_trainに代入しています。\\ +
-さらに、以下のコードで、正解ラベルをone hot ベクトルに変換したものを、y_trainに代入しています。+
  
 <code> <code>
-convert class vectors to binary class matrices +モデルの記述 
-y_train keras.utils.to_categorical(y_train10+model Sequential() 
-y_test = keras.utils.to_categorical(y_test, 10)+model.add(Dense(512activation='relu', input_shape=(784,))
 +model.add(Dropout(0.2)) 
 +model.add(Dense(512activation='relu')) 
 +model.add(Dropout(0.2)) 
 +model.add(Dense(10, activation='softmax'))
 </code> </code>
  
-具体的には、今回、+"model = Sequential()"というおまじないの文章の後モデルを1個ずつ順番に記述していきます。 
 + 
 +今回4層のMLP(multiple layer perceptron)のモデルを設定しています。
 <code> <code>
-print(x+model.add(Dense(512, activation='relu', input_shape=(784,))
-print(t)+model.add(Dropout(0.2))
 </code> </code>
-入力してShift + Enterで実行と、以下に表示されてます。+1層目の入力層は28x28=784個のunit(ノード)で、2層目の中間層は512個のunit(ノード)に設定していま。\\ 
 +2層目の活性化関数はrelu関数を用いており、\\ 
 +その後、ドロップアウトいって過学習を防ぐために、512個のunit(ノード)のうち、20%のunit(ノード)を無効化します。
  
-{{:pasted:20171106-053503.png}}+この話、初めての方には本当に訳わからん状態だとは思いますが、機械学習の理論のところなので、あとで、以下の本を読んで理解するのがお勧めです。
  
-{{:pasted:20171106-053530.png}}+<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=6a99e4e49da751388b138a1c4747e16b"></iframe> 
 +</html>
  
-{{:pasted:20171106-054412.png}}+(参考)\\ 
 +2016-07-18 
 +【Deep Learning】過学習とDropoutについて\\ 
 +http://sonickun.hatenablog.com/entry/2016/07/18/191656
  
-xは、1x784Numpy配列(各要素は0から1までの数値(dtype=float32))であ、tは正解ラベル(dtype=int32)となっています。+コード解説に戻ります。
  
-ードの解説戻ります。\\ +<code> 
-は、x_train[0]画像デJupyter Notebookで可視化しています。+model.add(Dense(512, activation='relu')) 
 +model.add(Dropout(0.2)) 
 +</code> 
 +上記と同様、3層目の中間層を512個のunit(ノード)設定していて、\\ 
 +3層目の活性化関数relu関数を用いており\\ 
 +過学習を防ぐために、512個unit(ノド)のうち、20%のunit(ノード)無効化します。
  
 <code> <code>
-# matplotlib使ったグラフ描画結果jupyter notebook内表示さうに +model.add(Dense(10, activation='softmax')) 
-%matplotlib inline +</code> 
-import matplotlib.pyplot as plt+4層目は出力層であり、0から9までの10個に分類するので、4層目は10個のunit(ノード)となります。\\ 
 +分類問題なので、出力層では活性化関数softmax関数を用いることになります。\\ 
 +蛇足です、回帰分析を行いたい場合は、分類問題の最後のsoftmax関数を恒等関数変更し、損失関数 (loss function) として2乗和誤差 (mean squared error) を設定すいと思われます。
  
-# データ例示 +入力層と出力層unit(ノド)数は常に一定ですが中間層層の数深く(Deep Learning)、中間層unit(ノード)変更たり畳み込み(Convolution)やMax Poolingを行ったり、損失関数の設定を変更したりしてモデルをいじることによ、より高い正解率をたたき出すこと求められており例えばhttps://www.kaggle.com/というサイトでは皆が「こモデで正解率xx%をたたき出しましたよ!」っています。 
-# x_trainデタセットの1行目つまり画像データNumpy配列(1x784)xとて取出す + 
-x = x_train[0] +<code> 
-# y_train正解ラベル(one-hot表現のベクトル)の1行目取り出し、numpyのargmax関数で数してり出す +model.summary()
-# 今回は正解ラベルのインデックスが、そのまま数字0や1ラベルとってい。 +
-t = np.argmax(y_train[0]) +
-# 1x784のNumpy配列xを、28x28のNumpy配列に変換後、matplotlibのpyplotを用いて、 +
-# グレースケール画像として読み込み、Jupyter Notebook内で表示 +
-plt.imshow(x.reshape(28, 28), cmap='gray'+
-plt.show() +
-# 正解ラベルの表示 +
-print('label:', t)+
 </code> </code>
 +modelをテキストで表示してくれます
  
-こちらは、ダウンロードしたMNIST画像の1つを、Jupyter Notebook上に表示して確認しています。一つ一つのコードについては、上記のコード内にコメントで記載しました。ここでは、Numpyのreshape()関数と、matplotlib.pyplotのimshow()関数、show()関数を用いています。numpyとmatplotlib機械学習プログミングよく使いますので、特にNumpyについては勉強しておく必要がありま+<code> 
 +# 損失関数などを設定 
 +model.compile(loss='categorical_crossentropy', 
 +              optimizer=RMSprop()
 +              metrics=['accuracy']) 
 +</code> 
 +損失関数にcategorical_crossentropy関数を用いています。\\ 
 +categorical_crossentropy:この目的関数を使うにベルがバイナリ配列あり,そ形状が(nb_samples, nb_classes)あることが必要だそうで(???)\\
  
-Numpyについては、[[http://twosquirrel.mints.ne.jp/?p=20153|Chainer用の画像処理メモ初めてのNumPy"import numpy as np"]]ご覧ただければ幸が、pythonで機械学習を行うためには必須事項ですので、[[http://amzn.to/2zeJ7Lz|ゼロら作るDeep Learning]]などの本を読んで繰り返し写経して、ある程度しっかり勉強しておく必要がありま+今回は、最適化関数optimizerに、RMSprop()。\\ 
 +metricsついてよくわかりません。。(爆)
  
-後半のコードは、特にMNISTのtrainingを行う際には不要すが、データを読み込んだときに、読み込んだデータと元データと整合性の検証大事なことなの、このようなコードを記載しました+KerasでのModel設定手順上記しまいです
  
-Kerasが用意しいるMNISTータセットを用いる手順は上記おしまです+初めの場合は、次は、とりあえず、<wrap hi>[[(4)モル学習(Keras)]]</wrap>に進んください。
  
-<wrap hi> 
-初めての場合は、次は、とりあえず、</wrap>[[(3)モデルの記述]]<wrap hi>に進んでください。 
-</wrap> 
  
-===== keras.datasets.mnist.load_data()関数について =====+===== kerasで損失関数(=目的関数)の利用方法 =====
  
 作成中 作成中
 +
 +(参考)
 +損失関数の利用方法について\\
 +https://keras.io/ja/losses/\\
 +https://keras.io/ja/objectives/
 +
 +
 +機械学習における誤差関数、損失関数、etcについて\\
 +http://otasuke.goo-net.com/qa8944219.html
 +
 +===== Optimizerについて =====
 +optimizer(最適化)について\\
 +https://keras.io/ja/optimizers/
 ===== 参考文献 ===== ===== 参考文献 =====
 初めてKerasプログラミングをやるときの超おすすめ本。\\ 初めてKerasプログラミングをやるときの超おすすめ本。\\

3_モデル設定_keras.1509917468.txt.gz · 最終更新: 2018/10/07 (外部編集)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki