畳み込みニューラルネットワーク_コンパイルとfit

ゆうき( @BASEBALLY15 )です^^

前回に,畳み込みニューラルネットワークの仕組みについてまとめました.

畳み込みニューラルネットワークのcompileとfitの使い方が分からないです・・・

そうなんですね^^
それでは,今回は畳み込みニューラルネットワークのcompileとfitの使い方について,大まかな概要をまとめます.

お願いします・・・

畳み込みニューラルネットワークって?

このようなコードを見たことはないでしょうか?

model = Sequential()
#------------------------------------------------
model.add(Conv2D(32, 
                 kernel_size=(3,3), 
                 padding="same",
                 input_shape=X.shape[1:]))

#マイナスの値を除去
model.add(Activation("relu"))
#------------------------------------------------ 
model.add(Conv2D(32, 
                 kernel_size=(3,3)))

model.add(Activation("relu"))

model.add(MaxPooling2D(pool_size=(2,2))) 

#過学習の抑制(ランダムでニューロンを無効化)
#偏ったニューロンに依存しないため
model.add(Dropout(rate=0.25))#25%無効化


#------------------------------------------------
model.add(Conv2D(64, 
                 kernel_size=(3,3), 
                 padding="same"))

model.add(Activation("relu"))
#------------------------------------------------
model.add(Conv2D(64, 
                 kernel_size=(3,3)))

model.add(Activation("relu"))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Dropout(0.25))


#------------------------------------------------
model.add(Flatten())

model.add(Dense(512))

model.add(Activation("relu"))

model.add(Dropout(0.5))

model.add(Dense(num_veg_classes))

model.add(Activation("softmax"))


#------------------------------------------------

#コンパイル
model.compile(loss="categorical_crossentropy", 
              optimizer="adam", 
              metrics=["accuracy"])

#学習
model.fit(X, Y, batch_size=32, epochs=100, verbose=1)

これは,畳み込みニューラルネットワークを行うためのコードです.

Conv2D』や『Activation(“relu”)』などは,前回にまとめた内容ですね^^

前回はこれらのコードの

model.add(Activation(“softmax”))

までについてまとめました.

そこで,今回は,前回以降の

compile』と『fit』についてまとめます.

上のコードのこの部分です⤵

#コンパイル
model.compile(loss="categorical_crossentropy", 
              optimizer="adam", 
              metrics=["accuracy"])

#学習
model.fit(X, Y, batch_size=32, epochs=100, verbose=1)

compile()とは?

コンパイル(compile)とは,『loss』,『optimizer』,『metrics』などで構成される,学習処理を行うためのメソッドです.

#コンパイル
model.compile(loss="categorical_crossentropy", 
              optimizer="adam", 
              metrics=["accuracy"])

それでは,『compile』内のコードについてまとめていきます.

lossとは?

loss』とは『損失関数』のことを指し,

予測した結果実際の結果との差を求めるために使います.

上で紹介している”categorical_crossentropy“は,

多クラス単一ラベル分類』と言います.

これ以外にも,以下のように様々な損失関数があります.

  • mean_squared_error(平均二乗誤差)
  • mean_absolute_error(平均絶対誤差)
  • mean_absolute_percentage_error(実際の結果と予測した結果の誤差(絶対値)の割合)
  • mean_squared_logarithmic_error(実際の結果と予測した結果の誤差(二乗誤差)の割合)
  • squared_hinge(誤差が負の時は0,正の時は二乗誤差)
  • hinge(誤差が負の時は0,正の時は絶対値)
  • categorical_hinge
  • logcosh
  • sparse_categorical_crossentropy
  • binary_crossentropy
  • kullback_leibler_divergence
  • poisson(予測値とポアソン分布の誤差)
  • cosine_proximity

学習する対象によって,適切なものを使って試してみてください^^

optimizerとは?

optimizer』は『最適化アルゴリズム』と言い,精度を出すための『重み』の更新を行います.

つまり,損失を最小にするように働きます.

今回は,”adam“という最適化アルゴリズムを使っています.

これは,以下の”AdaGrad“と”RMSprop“と”AdaDelta“を改良したものになります.

  • SGD(確率的勾配降下法)
  • Momentum SGD(SGDに慣性項を追加)
  • AdaGrad(学習係数を自動で調整)
  • RMSprop(AdaGradを改良)
  • AdaDelta(AdaGradやRMSPropを改良)

(※詳細については,参考資料に貼っておきます.)

metricsとは?

metrics』は,『評価関数』と言い,モデルの性能を測るために利用されます.

今回は,”accuracy“(正解率)を使っていますが,これ以外に以下のようなものがあります.

  • binary_accuracy(2クラス分類の正解率)
  • categorical_accuracy(多クラス分類の正解率)
  • sparse_categorical_accuracy
  • top_k_categorical_accuracy

基本的に,metrics=[“accuracy”]と書くけれど,自分で作ることも出来るみたいです^^

fit()とは?

次に,『fit』についてまとめていきます.

fit』は,コンパイルした結果を学習させるために使います.

#学習
model.fit(X, Y, batch_size=32, epochs=100, verbose=1)

それでは,fit内のコードについてまとめていきます.

batch_sizeとは?

バッチサイズ(batch_size)とは,学習させたいデータを小さなくくりに分けることを言います.

バッチサイズ(batch_size)

例えば,batch_size=32とは,

学習させたいデータが仮に32000個ある場合に

32個のまとまりを1000個に分けます.

そして,それを1000回学習させることを表しています.

epochsとは?

エポック数(epochs)とは,バッチサイズに分けたデータを学習させる回数のことを言います.

例えば,上で示した図の場合,

この作業を1回行うことを『1エポック(epochs=1)』と言います.

また,『100エポック(epochs=100』の場合はこのようになります.

エポック数(epochs)

エポック数を増やすことで,学習の精度を上げることが出来ます.

verboseとは?

verbose』とは,ニューラルネットワークの学習過程の表示方法を表しています.

下の図を見てください⤵

verbose

verbose=0の場合,学習過程を表示しません.

そして,verbose=1の場合,プログレスバーで表示します.

verbose=2の場合,結果のみを表示します.

このように,verboseの値によって,表示方法を変えることが出来ます.

終わりに

今回は,コンパイル(compile)と学習(fit)についてまとめました.

自分なりにまとめたので,もしかしたら不備があるかもしれません.

間違いなどがあれば,下のQ &Aで指摘していただけると幸いです。

それでは・・・

Q &A

参考資料

https://www.atmarkit.co.jp/ait/articles/1912/16/news026.html

https://to-kei.net/neural-network/nn_loss_function/

https://tekenuko.hatenablog.com/entry/2017/07/04/223010

https://qiita.com/Hatomugi/items/d00c1a7df07e0e3925a8

https://qiita.com/tokkuman/items/1944c00415d129ca0ee9

https://keras.io/ja/metrics/#_1

https://qiita.com/kenta1984/items/bad75a37d552510e4682

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA