4_モデル学習_keras

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
4_モデル学習_keras [2017/11/09]
adash333 [開発環境]
4_モデル学習_keras [2018/10/07] (現在)
ライン 14: ライン 14:
 <​code>​ <​code>​
 #4 モデル学習(Keras) #4 モデル学習(Keras)
-history = model.fit(X_train, y_train,+history = model.fit(x_train, y_train,
                     batch_size=batch_size,​ epochs=epochs,​                     batch_size=batch_size,​ epochs=epochs,​
-                    verbose=1, validation_data=(X_test, y_test))+                    verbose=1, validation_data=(x_test, y_test))
 </​code>​ </​code>​
  
-作成中 
  
 ===== 開発環境 ===== ===== 開発環境 =====
ライン 36: ライン 35:
  
 ==== 0. 前回終了時の画面 ==== ==== 0. 前回終了時の画面 ====
-[[(2)データ準備(Keras)]]終了時の、以下のような状態から始めます。+[[(3)ル設定(Keras)]]終了時の、以下のような状態から始めます。
  
-{{:​pasted:​20171106-051215.png}} +{{:​pasted:​20171106-063759.png}} 
-==== 1. モデルの設定 ​====+==== 1. モデルの学習 ​====
 以下のコードを入力して、Shift + Enterを押します。 以下のコードを入力して、Shift + Enterを押します。
  
 <​code>​ <​code>​
-#モデル設定(Keras) +#モデル学習(Keras) 
-batch_size ​128 +history ​= model.fit(x_train, y_train, 
-# num_classes = 10 +                    batch_size=batch_sizeepochs=epochs
-# epochs = 20 +                    ​verbose=1validation_data=(x_testy_test))
-epochs = 3 +
- +
-# モデルの記述 +
-model = Sequential() +
-model.add(Dense(512activation='​relu'​input_shape=(784,))) +
-model.add(Dropout(0.2)) +
-model.add(Dense(512,​ activation='​relu'​)) +
-model.add(Dropout(0.2)) +
-model.add(Dense(10activation='​softmax'​)) +
- +
-model.summary(+
- +
-# 損失関数などを設定 +
-model.compile(loss='​categorical_crossentropy'​, +
-              optimizer=RMSprop()+
-              metrics=['​accuracy'​])+
 </​code>​ </​code>​
  
 以下のような画面になります。 以下のような画面になります。
  
-{{:pasted:20171106-063744.png}}+{{:pasted:20171109-223753.png}}
  
-{{:​pasted:​20171106-063759.png}}+3分くらい待つと、学習が終了します。
  
-順に解説していきます。+{{:​pasted:​20171110-032455.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回に設定すればよいと思います。+model.fit()数にり、モデルの学習を実行います。
  
-batch_sizeについては、まだよく分かっていいので、今後、勉強して内容理解できたらこちら追加記載させていただきたいと思います。+引数については、KerasのDocumentationそのまとりますが、以下に記載ます。
  
-<​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個ずつ順番記述していきます。+x: 入力データ,Numpy 配列,あるは Numpy 配列リスト (モデルに複数の入力がある場合)\\ 
 +y: ラベル,Numpy 配列.
  
-今回は、4層のMLP(multiple layer perceptron)モデル設定しています。 +batch_size: 整数.設定したサンプル数ごとに勾配の更新を行います。今回は、<wrap hi>[[(3)モデル設定(Keras)]]</wrap>のところで、batch_size = 128と設定していましたで、128が用いられています。
-<​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(ノード)を無効化します。+
  
-この話、初めての方に本当に訳わからん状態だとは思いますが機械学習の理論のところなので、とで、以下の本を読んで理解するのお勧めです。+epochs: 整数で,モデルを訓練するエポック数。今回は、<wrap hi>​[[(3)モデル設定(Keras)]]</​wrap>​のところで、epochs = 3設定していましたので、3回学習行われています。
  
-<​html>​ +verbose: 0とすると標準出力にログを出力しません. 1の場合はログをプログレスバーで標準出力,2 の場合はエポックごとに1行のログを出力します
-<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>​+
  
-(参考)\\ +validation_data=(x_test,​ y_test): ホールドアウト検証用データ使うデータのタプル (x_val, y_val) か (x_val, y_val, val_sample_weights)。設定すると validation_split を無視します。
-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>​ +KerasでのModel学習手順は上記おしまいです。
-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%をたたき出しましたよ!」と競ってます+初めては、次は<wrap hi>[[(5)結果の出力(Keras)]]<​/wrap>​に進んください。
  
-<​code>​ 
-model.summary() 
-</​code>​ 
-modelをテキストで表示してくれます 
  
-<​code>​ +(参考
-# 損失関数などを設定 +Keras チュートリアル\\ 
-model.compile(loss='​categorical_crossentropy',​ +sasayabaku 
-              optimizer=RMSprop(), +2017年08月16日更新\\ 
-              ​metrics=['​accuracy'​]) +https://​qiita.com/​sasayabaku/​items/​64a01363bcd5c44feb0b
-</​code>​ +
-損失関数categorical_crossentropy関数を用いています。\\ +
-categorical_crossentropy:この目的関数を使うには,ラベルがバイナリ配列であり,その形状が(nb_samples,​ nb_classes)であることが必要だそうです(???)\\+
  
-今回は、最適化関数(optimizer)に、RMSprop()を用いています。\\ 
-metricsについてはよくわかりません。。。(爆) 
  
-KerasでModel設定手順は上記でおしまです。+===== kerasSequentialモデルfitメソッドにつて =====
  
-<wrap hi> +https://keras.io/​ja/​models/​sequential/​\\ 
-初めての場合は、次は、とりあえず、<​/wrap>​[[(4)モデル学習(Keras)]]<​wrap hi>​に進んでください。 +{{:​pasted:​20171110-035359.png}}
-</wrap>+
  
-===== kerasで損失関数(=目的関数)利用方法 =====+fit()関数は、固定エポック数でモデルを訓練します。
  
-+戻り値は、History オブジェクト。History.history 属性は、実行に功したエポックにおける訓練の損失値と評価関数値の記録と,(適用可能ならば)検証における損失値と評価関数値も記録しています。
  
-(参考) +model.fit()の返り値を出力を変数格納すると学習過程のパラメータの推移をプロットできます。
-損失関数利用方法ついて\\ +
-https://​keras.io/​ja/​losses/​\\ +
-https://​keras.io/​ja/​objectives/​+
  
 +上記の例では、Historyに格納しているので、以下のようなコードで、lossやaccuracyのグラフを出力することができます。
  
-機械学習における誤差関数、損失関数、etcについて\\ +<​code>​ 
-http://​otasuke.goo-net.com/​qa8944219.html+import matplotlib.pyplot as plt 
 +%matplotlib inline 
 +loss = history.history['​loss'​] 
 +val_loss = history.history['​val_loss'​]
  
-===== Optimizerについて ====+# lossのグラフ 
-optimizer(最適化)について\\ +plt.plot(range(3),​ loss, marker='​.',​ label='​loss'​) 
-https://​keras.io/​ja/​optimizers/​ +plt.plot(range(3),​ val_loss, marker='​.',​ label='​val_loss'​) 
-===== 参考文献 ===== +plt.legend(loc='​best',​ fontsize=10) 
-初めてKerasプログラミングをやるときの超おすすめ本。\\+plt.grid() 
 +plt.xlabel('​epoch'​) 
 +plt.ylabel('​loss'​) 
 +plt.show() 
 +</​code>​
  
-<​html>​+{{:​pasted:​20171110-040150.png}}
  
-<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>​+<code> 
 +import matplotlib.pyplot as plt 
 +%matplotlib inline 
 +acc history.history['​acc'​] 
 +val_acc ​history.history['​val_acc'​]
  
-&nbsp;+# accuracyのグラフ 
 +plt.plot(range(3),​ acc, marker='​.',​ label='​acc'​) 
 +plt.plot(range(3),​ val_acc, marker='​.',​ label='​val_acc'​) 
 +plt.legend(loc='​best',​ fontsize=10) 
 +plt.grid() 
 +plt.xlabel('​epoch'​) 
 +plt.ylabel('​acc'​) 
 +plt.show() 
 +</​code>​
  
-<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>​ +{{:pasted:20171110-040318.png}}
-</​html>​+
  
-===== リンク ===== 
  
-次 [[(4)モデル学習(Keras)]] 
- 
-前 [[(2)データ準備(Keras)]] 
- 
- 
-<wrap hi>​Keras2でMNIST目次</​wrap>​\\ 
-[[Kerasプログラミングの全体図]] 
-  -[[(1)Kerasを使用するためのimport文]] 
-  -[[(2)データ準備(Keras)]] 
-  -[[(3)モデル設定(Keras)]] 
-  -[[(4)モデル学習(Keras)]] 
-  -[[(5)結果の出力(Keras)]] 
-  -[[(6)学習結果の保存(Keras)]] 
-  -[[(7)推測(Keras)]] 
  
  
 +===== Optimizerについて =====
 +optimizer(最適化)について\\
 +https://​keras.io/​ja/​optimizers/​
  
 ===== 参考文献 ===== ===== 参考文献 =====

4_モデル学習_keras.1510234393.txt.gz · 最終更新: 2018/10/07 (外部編集)