预训练的深度学习模型具有与其相关联的两种类型的权重,其中顶部(意味着密集的完全连接层)和无顶部(移除密集的完全连接的层) . 我想知道如何为no_top权重训练模型
例如:我有一个架构,我想为它训练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 :此处训练将更改所有图层的权重(预训练图层新图层) . 您可能希望在训练之前冻结预训练的层,以保持训练有素的重量 .
1 回答
既然你在谈论CIFAR10,我会给你一个图像分类的例子 .
首先,您可以从Keras获得没有顶层的预训练模型 .
然后为分类任务添加新图层 .
最后一层有10个单位,因为CIFAR10有10个类 .
你创建你的模型 .
您将获得CIFAR10数据 .
编译和训练 .
Note :此处训练将更改所有图层的权重(预训练图层新图层) . 您可能希望在训练之前冻结预训练的层,以保持训练有素的重量 .