kerasでinput_shapeとoutput_shapeを取得する

転移学習をする際、元になるモデルは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を書き換える必要がなくなって楽ちん

コメント

タイトルとURLをコピーしました