
ゆうき( @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=32とは,
学習させたいデータが仮に32000個ある場合に
32個のまとまりを1000個に分けます.
そして,それを1000回学習させることを表しています.
epochsとは?
エポック数(epochs)とは,バッチサイズに分けたデータを学習させる回数のことを言います.
例えば,上で示した図の場合,
この作業を1回行うことを『1エポック(epochs=1)』と言います.
また,『100エポック(epochs=100』の場合はこのようになります.

エポック数を増やすことで,学習の精度を上げることが出来ます.
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