预训练的深度学习模型具有与它们相关的2种类型的权重,顶部(意味着密集的完全连接的层(和没有_top(删除密集的完全连接的层(。我想知道如何训练NO_TOP权重
的模型for Eg:我有一个体系结构,我想创建在CIFAR10数据上训练它的权重。
由于您在谈论CIFAR10,我将为您提供图像分类的示例。
首先,您可以从没有顶层的Keras获得预训练的模型。
from keras.applications.vgg16 import VGG16
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(48, 48, 3))
然后,您为分类任务添加新层。
x = base_model.output
x = Flatten()(x)
x = Dense(512, activation='elu', kernel_initializer='he_normal')(x)
prediction = Dense(10, activation='softmax', kernel_initializer='he_normal')(x)
最后一层有10个单元,因为CIFAR10有10个类。
您创建模型。
model = Model(inputs=base_model.input, outputs=prediction)
您获取CIFAR10数据。
from keras.datasets import cifar10
(Xtrain, Ytrain), (Xtest, Ytest) = cifar10.load_data()
Ytrain = to_categorical(Ytrain)
Ytest = to_categorical(Ytest)
编译和火车。
model.compile(Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(Xtrain, Ytrain, batch_size=64, epochs=1, validation_data=(Xtest, Ytest))
NOTE :在这里,训练将改变您所有层的权重(预训练层 新层(。您可能需要在训练之前冻结预训练的层以保持训练有素的重量。