#Kerasに関して
##関数の意味
model.add(Conv2D(32, (3, 3), input_shape=(128, 128, 3)))
・32個のフィルタ(カーネル)を用意。
・フィルタサイズは(3,3)
・入力画像は128128pxとRGB分で3
出力画像は(126, 126, 32)
##出力表の見方
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 126, 126, 32) 896
_________________________________________________________________
・input_shape=(データ数, 128, 128, 3)
の4次元テンソル。
・出力画像は周囲1px分減って126126px(sameを使うと縁は0で埋めてくれる)。
・Paramは層のパラメータ数。今回はRGBなのでフィルタも3次元、すなわち一つのフィルタの重みの数は、333=27にバイアスを足して27+1=28。あとはフィルタ数をかけて2832=896。出力は式で表すと
y=\phi \left(\sum_{j=1}^{27} w_{ij}x_j+b_i \right)
iはフィルタ番号、jはフィルタの重み。
##fit_generatorの使い方
history = model.fit_generator(
generator=train_generator,
steps_per_epoch=200,
epochs=epochs,
validation_data=validation_generator,
validation_steps=200)
ミニバッチでの重み更新を行ってくれる。
引用:https://jp.mathworks.com/matlabcentral/answers/333915-
誤差計算と重み更新には、主にバッチ、ミニバッチ、オンラインの三つのいずれかの方法が使われます。
このうちのミニバッチ学習とは、ネットワークのパラメータ学習に対して全学習サンプルを一度に使うのではなく、全学習サンプルから一定数のサンプルを抽出したサブセットを使って誤差計算と重み更新を行う方法です。ひとつのサンプルごとに重みを更新するオンラインの方法と比較すると高速に処理を行うことができ、バッチと比べて良い精度を得られることが、ミニバッチの利点です。ディープラーニングでミニバッチを使用する際には、よくエポックごとにミニバッチの学習サンプルがシャッフルされ、ランダムに抽出されます。
・generatorとvalidation_data、(inputs, targets)のタプル。
・steps_per_epochとvalidation_stepsは、1エポックあたりのステップ数。すなわち、全サンプル数=バッチ数*ステップ数。
###参考
http://qiita.com/agumon/items/ab2de98a3783e0a93e66
https://deepage.net/deep_learning/2016/11/07/convolutional_neural_network.html
http://qiita.com/icoxfog417/items/96ecaff323434c8d677b