(3)モデルの設定(Keras)
Keras2でMNIST目次
Kerasプログラミングの全体図
- (3)モデル設定(Keras) ⇐ いまココ
model = Sequential()からスタートして、順番にモデルを記述していきます。
#3 モデルの記述(Keras) batch_size = 128 num_classes = 10 # epochs = 20 epochs = 3 model = Sequential() # model.addでモデルを記述していく model.summary() model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
モデルの記述は、見たままな感じで、個人的にはKerasのこのモデルの記述方法が分かりやすくて好みです。
開発環境
Windows 8.1
Anaconda
Python 3.5
Tensorflow 1.4
Keras 2.0.9
Keras2.0のインストール方法はwindowsにkeras2.0をインストールをご覧下さい。
このページは、(2)データ準備(Keras)の続きであり、今回は、モデルの設定を行っていきます。
手順
0. 前回終了時の画面
(2)データ準備(Keras)終了時の、以下のような状態から始めます。
1. モデルの設定
以下のコードを入力して、Shift + Enterを押します。
#3 モデル設定(Keras) batch_size = 128 # num_classes = 10 # epochs = 20 epochs = 3 # モデルの記述 model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(10, activation='softmax')) model.summary() # 損失関数などを設定 model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
以下のような画面になります。
順に解説していきます。
#3 モデル設定(Keras) batch_size = 128 # num_classes = 10 # epochs = 20 epochs = 3
batch_size, epochsなどの数値を設定します。epochsは、学習を繰り返す回数であり、回数が少なすぎても、多すぎても微妙と言われています(参考:過学習、early stopping)。今回のコードの場合、適切なepoch数についてはわかりませんが、学習にかかる時間について記載します。ノートパソコンだと、1 epochあたり32秒くらいかかるので、今回のチュートリアルでは、epoch数をかなり少ない3回としました。GPUを積んだデスクトップパソコンだと、1 epochあたり2秒とかなので、epoch数は20回に設定すればよいと思います。
batch_sizeについては、まだよく分かっていないので、今後、勉強して内容が理解できたら、こちらに追加記載させていただきたいと思います。
# モデルの記述 model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(10, activation='softmax'))
“model = Sequential()“というおまじないの文章の後、モデルを1個ずつ順番に記述していきます。
今回は、4層のMLP(multiple layer perceptron)のモデルを設定しています。
model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2))
1層目の入力層は28×28=784個のunit(ノード)で、2層目の中間層は512個のunit(ノード)に設定しています。
2層目の活性化関数はrelu関数を用いており、
その後、ドロップアウトといって、過学習を防ぐために、512個のunit(ノード)のうち、20%のunit(ノード)を無効化します。
この話、初めての方には本当に訳わからん状態だとは思いますが、機械学習の理論のところなので、あとで、以下の本を読んで理解するのがお勧めです。
<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>
(参考)
2016-07-18
【Deep Learning】過学習とDropoutについて
http://sonickun.hatenablog.com/entry/2016/07/18/191656
コードの解説に戻ります。
<code>
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
</code>
上記と同様、3層目の中間層を512個のunit(ノード)に設定していて、
3層目の活性化関数はrelu関数を用いており、
過学習を防ぐために、512個のunit(ノード)のうち、20%のunit(ノード)を無効化します。
<code>
model.add(Dense(10, activation='softmax'))
</code>
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%をたたき出しましたよ!」と競っています。
<code>
model.summary()
</code>
modelをテキストで表示してくれます
<code>
# 損失関数などを設定
model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])
</code>
損失関数にcategorical_crossentropy関数を用いています。
categorical_crossentropy:この目的関数を使うには,ラベルがバイナリ配列であり,その形状が(nb_samples, nb_classes)であることが必要だそうです(???)
今回は、最適化関数(optimizer)に、RMSprop()を用いています。
metricsについてはよくわかりません。。。(爆)
KerasでのModel設定の手順は上記でおしまいです。
初めての場合は、次は、とりあえず、(4)モデル学習(Keras)に進んでください。
===== 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プログラミングをやるときの超おすすめ本。
<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=13a7db2c19cc5f40d6ab48906de8abd1”></iframe>
<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=4839962510&linkId=d722909965b5eab4196d370757843f6f”></iframe>
</html>
===== リンク =====
次 (4)モデル学習(Keras)
前 (2)データ準備(Keras)
Keras2でMNIST目次
Kerasプログラミングの全体図
-(1)Kerasを使用するためのimport文
-(2)データ準備(Keras)
-(3)モデル設定(Keras)
-(4)モデル学習(Keras)
-(5)結果の出力(Keras)
-(6)学習結果の保存(Keras)
-(7)推測(Keras)