ユーザ用ツール

サイト用ツール


3_モデル設定_keras

(3)モデルの設定(Keras)

Keras2でMNIST目次

Kerasプログラミングの全体図

  1. (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(ノード)を無効化します。

この話、初めての方には本当に訳わからん状態だとは思いますが、機械学習の理論のところなので、あとで、以下の本を読んで理解するのがお勧めです。

(参考)

2016-07-18
【Deep Learning】過学習とDropoutについて

http://sonickun.hatenablog.com/entry/2016/07/18/191656

コードの解説に戻ります。

model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))

上記と同様、3層目の中間層を512個のunit(ノード)に設定していて、

3層目の活性化関数はrelu関数を用いており、

過学習を防ぐために、512個のunit(ノード)のうち、20%のunit(ノード)を無効化します。

model.add(Dense(10, activation='softmax'))

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%をたたき出しましたよ!」と競っています。

model.summary()

modelをテキストで表示してくれます

# 損失関数などを設定
model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

損失関数に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プログラミングをやるときの超おすすめ本。

 

リンク

3_モデル設定_keras.txt · 最終更新: 2018/10/07 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki