転移学習をする際、元になるモデルはVGG16やResNet、Xceptionなど種類が多い
色々試してみたいけど、その度にソースコードのinput_shapeを書き換えるのが面倒くさいし、argeparseで引数にするのも手間
なので、直接入力画像サイズを取得できないか調べてみたらkerasのドキュメントに書いてあった
Keras documentation: Page not found
Keras documentation
もし,レイヤーがシングルノードを持つなら(i.e. もし共有レイヤーでないなら),入力テンソル,出力テンソル,入力のshape,出力のshapeを得ることができます:
layer.input
layer.output
layer.input_shape
layer.output_shape
例えばこんな感じ
from keras.applications.vgg16 import VGG16
model = VGG16(include_top=False, weights='imagenet', input_shape=(224, 224, 3))
print(model.input_shape)
(None, 224, 224, 3)
print(model.output_shape)
(None, 7, 7, 512)
これで毎回数値を指定する必要は無くなりそう
model.save(save_name)
モデルを保存できるので、転移学習の時は忘れずに保存しておく
推論をする時は
from keras.models import load_model
model = load_model(train_model)
input_shape = (model.input_shape[1], model.input_shape[2], model.input_shape[3])
とすれば使い回せるソースコードになる
VGG16やResNetなど色々転移学習して試してみたいので、毎回input_shapeを書き換える必要がなくなって楽ちん
コメント