2章 p.87-90

AI モデルの性能を上げる方法 1

モデルの転移学習

モデルの転移学習・ファインチューニング

EfficientNet

元本 p.88 では EfficientNet の学習済みモデルを tensorflow_hub からダウンロードしていた。 tensorflow_hub は tensorflow 本体に keras と共に取り込まれたので、以下に示すのはそれを反映したコードである。

EfficientNet (のうち最も解像度が低い EfficientNetB0)の入力は、解像度 (224, 224, 3)で各ピクセル値が[0, 255]の画像データである。 EfficientNetB[0-7] の8種類があり、それぞれ入力の正方形解像度の一辺は 224, 240, 260, 300, 380, 456, 528, 600 ピクセルである。

Data Augmentation を使って trainingする

元本はピクセル値を [0, 255] から [0.0, 1.0]にスケール変換するために ImageDataGenerator を使っていたようだ。 EfficientNet は[0, 255]の値を取るので rescale は必要ない。

[自分へのメモ] keras の models.fit(..., shuffle=TRUE, ...) はshuffleという引数を持っていてtraining時の各epochでデータをshuffleするかどうかを指定できる。 デフォルトではTRUEであるが、入力にgeneratorが与えられるとFALSEとなる。 したがって、ImageDataGenerator を使わずに次のようにshuffleを敢えて指定しなくても正しく学習できる。

mode.fit(
x_train,
t_train,
batch_size=BATCH_SIZE,
verbose=1,
valiation_data=(x_val, t_val)
)

訓練の accuracy も検証の accuracy も共に 0.95 を超えていて 1.0 に近いので、うまく学習できたといえる。

[自分へのメモ]</a>ImageDataGenerator で引数として rescale=1/255 を指定しないことが重要である。

EfficientB0 は (224, 224, 3)の入力画像を与えると マニュアルには書いてあった が、入力画像として (64, 64, 3) を与えても Warning はでなかった。