4_モデル学習_keras
                
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| 4_モデル学習_keras [2017/11/09] – [0. 前回終了時の画面] adash333 | 4_モデル学習_keras [2018/10/07] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 14: | 行 14: | ||
| < | < | ||
| #4 モデル学習(Keras) | #4 モデル学習(Keras) | ||
| - | history = model.fit(X_train, y_train, | + | history = model.fit(x_train, y_train, | 
| batch_size=batch_size, | batch_size=batch_size, | ||
| - | verbose=1, validation_data=(X_test, y_test)) | + | verbose=1, validation_data=(x_test, y_test)) | 
| </ | </ | ||
| - | 作成中 | ||
| ===== 開発環境 ===== | ===== 開発環境 ===== | ||
| 行 39: | 行 38: | ||
| {{: | {{: | ||
| - | ==== 1. モデルの設定 | + | ==== 1. モデルの学習 | 
| 以下のコードを入力して、Shift + Enterを押します。 | 以下のコードを入力して、Shift + Enterを押します。 | ||
| < | < | ||
| - | #3 モデル設定(Keras) | + | #4 モデル学習(Keras) | 
| - | batch_size | + | history | 
| - | # num_classes = 10 | + | batch_size=batch_size, epochs=epochs, | 
| - | # epochs = 20 | + |  | 
| - | epochs = 3 | + | |
| - | + | ||
| - | # モデルの記述 | + | |
| - | model = Sequential() | + | |
| - | model.add(Dense(512, activation=' | + | |
| - | model.add(Dropout(0.2)) | + | |
| - | model.add(Dense(512, | + | |
| - | model.add(Dropout(0.2)) | + | |
| - | model.add(Dense(10, activation=' | + | |
| - | + | ||
| - | model.summary() | + | |
| - | + | ||
| - | # 損失関数などを設定 | + | |
| - | model.compile(loss=' | + | |
| - | optimizer=RMSprop(), | + | |
| - | metrics=[' | + | |
| </ | </ | ||
| 以下のような画面になります。 | 以下のような画面になります。 | ||
| - | {{:pasted:20171106-063744.png}} | + | {{:pasted:20171109-223753.png}} | 
| - | {{: | + | 3分くらい待つと、学習が終了します。 | 
| - | 順に解説していきます。 | + | {{: | 
| - | < | ||
| - | #3 モデル設定(Keras) | ||
| - | batch_size = 128 | ||
| - | # num_classes = 10 | ||
| - | # epochs = 20 | ||
| - | epochs = 3 | ||
| - | </ | ||
| - | batch_size, epochsなどの数値を設定します。epochsは、学習を繰り返す回数であり、回数が少なすぎても、多すぎても微妙と言われています(参考: | + | model.fit()関数により、モデルの学習を実行しています。 | 
| - | batch_sizeについては、まだよく分かっていないので、今後、勉強して内容が理解できたら、こちらに追加記載させていただきたいと思います。 | + | 引数については、KerasのDocumentationそのままとなりますが、以下に記載します。 | 
| - | < | + | ---- | 
| - | # モデルの記述 | + | |
| - | model = Sequential() | + | |
| - | model.add(Dense(512, | + | |
| - | model.add(Dropout(0.2)) | + | |
| - | model.add(Dense(512, | + | |
| - | model.add(Dropout(0.2)) | + | |
| - | model.add(Dense(10, | + | |
| - | </ | + | |
| - | "model = Sequential()" | + | x: 入力データ,Numpy 配列,あるいは Numpy 配列のリスト (モデルに複数の入力がある場合)\\ | 
| + | y: ラベル,Numpy 配列. | ||
| - | 今回は、4層のMLP(multiple layer perceptron)のモデルを設定しています。 | + | batch_size: 整数.設定したサンプル数ごとに勾配の更新を行います。今回は、<wrap hi>[[(3)モデル設定(Keras)]]</wrap>のところで、batch_size = 128と設定していましたので、128が用いられています。 | 
| - | < | + | |
| - | model.add(Dense(512, activation=' | + | |
| - | model.add(Dropout(0.2)) | + | |
| - | </code> | + | |
| - | 1層目の入力層は28x28=784個のunit(ノード)で、2層目の中間層は512個のunit(ノード)に設定しています。\\ | + | |
| - | 2層目の活性化関数はrelu関数を用いており、\\ | + | |
| - | その後、ドロップアウトといって、過学習を防ぐために、512個のunit(ノード)のうち、20%のunit(ノード)を無効化します。 | + | |
| - | この話、初めての方には本当に訳わからん状態だとは思いますが、機械学習の理論のところなので、あとで、以下の本を読んで理解するのがお勧めです。 | + | epochs: 整数で,モデルを訓練するエポック数。今回は、<wrap hi> | 
| - | < | + | verbose: 0とすると標準出力にログを出力しません. 1の場合はログをプログレスバーで標準出力,2 の場合はエポックごとに1行のログを出力します | 
| - | <iframe style=" | + | |
| - | </ | + | |
| - | (参考)\\ | + | validation_data=(x_test, | 
| - | 2016-07-18 | + | |
| - | 【Deep Learning】過学習とDropoutについて\\ | + | |
| - | http:// | + | |
| - | コードの解説に戻ります。 | + | ---- | 
| - | < | ||
| - | model.add(Dense(512, | ||
| - | model.add(Dropout(0.2)) | ||
| - | </ | ||
| - | 上記と同様、3層目の中間層を512個のunit(ノード)に設定していて、\\ | ||
| - | 3層目の活性化関数はrelu関数を用いており、\\ | ||
| - | 過学習を防ぐために、512個のunit(ノード)のうち、20%のunit(ノード)を無効化します。 | ||
| - | < | + | KerasでのModel学習の手順は上記でおしまいです。 | 
| - | model.add(Dense(10, | + | |
| - | </ | + | |
| - | 4層目は出力層であり、0から9までの10個に分類するので、4層目は10個のunit(ノード)となります。\\ | + | |
| - | 分類問題なので、出力層では活性化関数をsoftmax関数を用いることになります。\\ | + | |
| - | 蛇足ですが、回帰分析を行いたい場合は、分類問題の最後のsoftmax関数を恒等関数に変更し、損失関数 (loss function) として2乗和誤差 (mean squared error) を設定すればよいと思われます。 | + | |
| - | 入力層と出力層のunit(ノード)数は、常に一定ですが、中間層の層の数を深くしたり(Deep Learning)、中間層のunit(ノード)数を変更したり、畳み込み(Convolution)やMax Poolingを行ったり、損失関数の設定値を変更したりしてモデルをいじることにより、より高い正解率をたたき出すことが求められており、例えば、https: | + | 初めての方は、次は、<wrap hi>[[(5)結果の出力(Keras)]]< | 
| - | < | ||
| - | model.summary() | ||
| - | </ | ||
| - | modelをテキストで表示してくれます | ||
| - | < | + | (参考) | 
| - | # 損失関数などを設定 | + | Keras チュートリアル\\ | 
| - | model.compile(loss=' | + | sasayabaku | 
| - | optimizer=RMSprop(), | + | 2017年08月16日に更新\\ | 
| - |  | + | https:// | 
| - | </ | + | |
| - | 損失関数にcategorical_crossentropy関数を用いています。\\ | + | |
| - | categorical_crossentropy:この目的関数を使うには,ラベルがバイナリ配列であり,その形状が(nb_samples, | + | |
| - | 今回は、最適化関数(optimizer)に、RMSprop()を用いています。\\ | ||
| - | metricsについてはよくわかりません。。。(爆) | ||
| - | KerasでのModel設定の手順は上記でおしまいです。 | + | ===== kerasのSequentialモデルのfitメソッドについて ===== | 
| - | <wrap hi> | + | https://keras.io/ | 
| - | 初めての場合は、次は、とりあえず、< | + | {{: | 
| - | </wrap> | + | |
| - | ===== kerasで損失関数(=目的関数)の利用方法 ===== | + | fit()関数は、固定のエポック数でモデルを訓練します。 | 
| - | 作成中 | + | 戻り値は、History オブジェクト。History.history 属性は、実行に成功したエポックにおける訓練の損失値と評価関数値の記録と,(適用可能ならば)検証における損失値と評価関数値も記録しています。 | 
| - | (参考) | + | model.fit()の返り値を出力を変数に格納すると学習過程のパラメータの推移をプロットできます。 | 
| - | 損失関数の利用方法について\\ | + | |
| - | https:// | + | |
| - | https:// | + | |
| + | 上記の例では、Historyに格納しているので、以下のようなコードで、lossやaccuracyのグラフを出力することができます。 | ||
| - | 機械学習における誤差関数、損失関数、etcについて\\ | + | < | 
| - | http:// | + | import matplotlib.pyplot as plt | 
| + | %matplotlib inline | ||
| + | loss = history.history[' | ||
| + | val_loss = history.history[' | ||
| - | ===== Optimizerについて ===== | + | # lossのグラフ | 
| - | optimizer(最適化)について\\ | + | plt.plot(range(3), | 
| - | https:// | + | plt.plot(range(3), | 
| - | ===== 参考文献 ===== | + | plt.legend(loc=' | 
| - | 初めてKerasプログラミングをやるときの超おすすめ本。\\ | + | plt.grid() | 
| + | plt.xlabel(' | ||
| + | plt.ylabel(' | ||
| + | plt.show() | ||
| + | </ | ||
| - | < | + | {{: | 
| - | <iframe style=" | + | <code> | 
| + | import matplotlib.pyplot as plt | ||
| + | %matplotlib inline | ||
| + | acc = history.history[' | ||
| + | val_acc | ||
| - |   | + | # accuracyのグラフ | 
| + | plt.plot(range(3), | ||
| + | plt.plot(range(3), | ||
| + | plt.legend(loc=' | ||
| + | plt.grid() | ||
| + | plt.xlabel(' | ||
| + | plt.ylabel(' | ||
| + | plt.show() | ||
| + | </ | ||
| - | <iframe style=" | + | {{:pasted:20171110-040318.png}} | 
| - | </ | + | |
| - | ===== リンク ===== | ||
| - | 次 [[(4)モデル学習(Keras)]] | ||
| - | |||
| - | 前 [[(2)データ準備(Keras)]] | ||
| - | |||
| - | |||
| - | <wrap hi> | ||
| - | [[Kerasプログラミングの全体図]] | ||
| - | -[[(1)Kerasを使用するためのimport文]] | ||
| - | -[[(2)データ準備(Keras)]] | ||
| - | -[[(3)モデル設定(Keras)]] | ||
| - | -[[(4)モデル学習(Keras)]] | ||
| - | -[[(5)結果の出力(Keras)]] | ||
| - | -[[(6)学習結果の保存(Keras)]] | ||
| - | -[[(7)推測(Keras)]] | ||
| + | ===== Optimizerについて ===== | ||
| + | optimizer(最適化)について\\ | ||
| + | https:// | ||
| ===== 参考文献 ===== | ===== 参考文献 ===== | ||
4_モデル学習_keras.1510234446.txt.gz · 最終更新: 2018/10/07 (外部編集)
                
                