3_モデル設定_keras

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
3_モデル設定_keras [2017/11/05]
adash333 [(3)モデルの設定(Keras)]
3_モデル設定_keras [2018/10/07] (現在)
ライン 32: ライン 32:
  
  
 +===== 開発環境 =====
 +Windows 8.1\\
 +Anaconda \\
 +Python 3.5\\
 +Tensorflow 1.4\\
 +Keras 2.0.9\\
 +
 +Keras2.0のインストール方法は[[windowsにkeras2.0をインストール]]をご覧下さい。
 +
 +このページは、[[(2)データ準備(Keras)]]の続きであり、今回は、モデルの設定を行っていきます。
 +
 +===== 手順 =====
 +
 +
 +==== 0. 前回終了時の画面 ====
 +[[(2)データ準備(Keras)]]終了時の、以下のような状態から始めます。
 +
 +{{:​pasted:​20171106-051215.png}}
 +==== 1. モデルの設定 ====
 +以下のコードを入力して、Shift + Enterを押します。
 +
 +<​code>​
 +#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'​])
 +</​code>​
 +
 +以下のような画面になります。
 +
 +{{:​pasted:​20171106-063744.png}}
 +
 +{{:​pasted:​20171106-063759.png}}
 +
 +順に解説していきます。
 +
 +<​code>​
 +#3 モデル設定(Keras)
 +batch_size = 128
 +# num_classes = 10
 +# epochs = 20
 +epochs = 3
 +</​code>​
 +
 +batch_size, epochsなどの数値を設定します。epochsは、学習を繰り返す回数であり、回数が少なすぎても、多すぎても微妙と言われています(参考:​過学習、early stopping)。今回のコードの場合、適切なepoch数についてはわかりませんが、学習にかかる時間について記載します。ノートパソコンだと、1 epochあたり32秒くらいかかるので、今回のチュートリアルでは、epoch数をかなり少ない3回としました。GPUを積んだデスクトップパソコンだと、1 epochあたり2秒とかなので、epoch数は20回に設定すればよいと思います。
 +
 +batch_sizeについては、まだよく分かっていないので、今後、勉強して内容が理解できたら、こちらに追加記載させていただきたいと思います。
 +
 +<​code>​
 +# モデルの記述
 +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'​))
 +</​code>​
 +
 +"model = Sequential()"​というおまじないの文章の後、モデルを1個ずつ順番に記述していきます。
 +
 +今回は、4層のMLP(multiple layer perceptron)のモデルを設定しています。
 +<​code>​
 +model.add(Dense(512,​ activation='​relu',​ input_shape=(784,​)))
 +model.add(Dropout(0.2))
 +</​code>​
 +1層目の入力層は28x28=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設定の手順は上記でおしまいです。
 +
 +初めての場合は、次は、とりあえず、<​wrap hi>​[[(4)モデル学習(Keras)]]</​wrap>​に進んでください。
 +
 +
 +===== 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.1509916068.txt.gz · 最終更新: 2018/10/07 (外部編集)