我有一个VGG16样式模型(即具有完全连接的图层的CNN)另存为json文件,权重另存为h5文件。
我想加载此模型并将其转换为FCN(完全卷积模型),该模型可以接受可变大小的RGB图像作为输入。
据我了解,主要有4个步骤: 1)更改输入层以接受可变大小的输入RGB输入。 2)从具有完全连接层的VGG16样式模型中删除完全连接层。 3)添加等效于完全连接层的适当卷积层。 4)调整形状并设置新卷积层的权重。
我相信我知道如何执行第2-4步。但是,在执行步骤1时遇到问题。
我已经读过Keras replacing input layer之类的帖子,但是找不到适合我的解决方案。
这就是我想要做的:
#load model & weights
with open(model_json_file, 'r') as json_file:
model_json = json_file.read()
vgg16_model = model_from_json(model_json)
vgg16_model.load_weights(model_h5_file)
#remove input layer
vgg16_model.layers.pop(0)
x = vgg16_model.get_layer('block5_pool').output
x = Conv2D(4096, (7,7), strides=1, padding='same', data_format='channels_last', activation='relu', use_bias=True)(x)
x = Conv2D(1000, (7,7), strides=1, padding='same', data_format='channels_last', activation='relu', use_bias=True)(x)
x = Conv2D(2, (7,7), strides=1, padding='same', data_format='channels_last', activation='relu', use_bias=True)(x)
new_input = Input(shape=(None,None,3), batch_shape=None, name='fcn_input')
vgg16_model.layers[0](new_input)
fcn_model_fixed_input = Model(inputs=vgg16_model.input, outputs=x)
然后:
fcn_model_fixed_input.summary()
给予: