我是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?
答案 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)