如何加载具有完全连接层的Keras CNN模型并转换为FCN?

时间:2019-03-15 20:44:15

标签: python keras conv-neural-network vgg-net

我有一个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()

给予:

wind_turbine_fcn_model_fixed_input.summary()

0 个答案:

没有答案