在预训练模型

时间:2018-02-01 22:56:48

标签: python conv-neural-network

我是ConvNets和Python的新手,想要实现以下内容:

我想使用预训练的vgg16模型并在其后添加3个完全连接的层,最后使用L2标准化。

  

So Data-> VGG16-> FC(1x4096) - > FC(1x4096) - > FC(1x3) - > L2-Norm->输出

第一个和第二个FC得到一个数组1x4096,最后一个FC得到一个数组1x3,执行L2-Norm。

任何人都可以给我一个如何做到这一点的提示吗?

我发现我可以加载这样的模型:

  

model_vgg19 = models.vgg19(pretrained = True)

但是我怎么能在那之后添加FC和L2-Norm?如何通过模型获得Test-Data?

1 个答案:

答案 0 :(得分:1)

我引用了Keras#3465

中提到的一个例子

在Keras框架中,如果您在加载预训练模型时提及include_top = False,则不会包含最终分类层。您可以在末尾添加自定义FC图层,如下例所示:

#load vgg16 without dense layer and with theano dim ordering
base_model = VGG16(weights = 'imagenet', include_top = False, input_shape = (3,224,224))

#number of classes in your dataset e.g. 20
num_classes = 20

x = Flatten()(base_model.output)
x = Dense(4096, activation='relu')(x)
x = Dropout(0.5)(x)
x = BatchNormalization()(x)
predictions = Dense(num_classes, activation = 'softmax')(x)

#create graph of your new model
head_model = Model(input = base_model.input, output = predictions)

#compile the model
head_model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

head_model.summary()
.
.
.
#train your model on data
head_model.fit(x, y, batch_size = batch_size, verbose = 1)