ユーザ用ツール

サイト用ツール


3_モデル設定_keras

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
3_モデル設定_keras [2017/11/04] – [(3)モデルの設定(Keras)] adash3333_モデル設定_keras [2018/10/07] (現在) – 外部編集 127.0.0.1
行 10: 行 10:
   -[[(7)推測(Keras)]]   -[[(7)推測(Keras)]]
  
-最初以下コピペするだけですが、プログラムごとに、さらにimport文の追加が必要になる場合があります。+model = Sequential()からスタートして、順番モデル記述していきます。
  
 <code> <code>
-import keras +#3 モデルの記述(Keras) 
-from keras.models import Sequential +batch_size = 128 
-from keras.layers import Dense, Dropout +num_classes = 10 
-from keras.optimizers import RMSprop +# epochs = 20 
-from keras.utils import np_utils+epochs = 3
  
-from sklearn.model_selection import train_test_split+model = Sequential() 
 +# model.addでモデルを記述していく
  
-import numpy as np +model.summary() 
-from PIL import Image + 
-import os+model.compile(loss='categorical_crossentropy', 
 +              optimizer=RMSprop(), 
 +              metrics=['accuracy'])
 </code> </code>
  
-始めはかなりとつきにimport文ですpython勉強をしていにつて、徐々に、れてきます。+モデルの記述は、見たままな感じで、個人的には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)]]終了時の、以下のような状態から始めます。 
 + 
 +{{: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で損失関数(=目的関数)の利用方法 ===== 
 + 
 +作成中
  
-keras特有もの以外のimport文については、以下のリンクをご覧ください。+(参考) 
 +損失関数利用方法について\\ 
 +https://keras.io/ja/losses/\\ 
 +https://keras.io/ja/objectives/
  
-機械学習で用いるpythonの”import xxx”まとめ\\ 
-2017/10/25\\ 
-http://twosquirrel.mints.ne.jp/?p=20344 
  
 +機械学習における誤差関数、損失関数、etcについて\\
 +http://otasuke.goo-net.com/qa8944219.html
  
 +===== Optimizerについて =====
 +optimizer(最適化)について\\
 +https://keras.io/ja/optimizers/
 ===== 参考文献 ===== ===== 参考文献 =====
 初めてKerasプログラミングをやるときの超おすすめ本。\\ 初めてKerasプログラミングをやるときの超おすすめ本。\\

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki