首页 文章

keras模型的no_top权重

提问于
浏览
0

预训练的深度学习模型具有与其相关联的两种类型的权重,其中顶部(意味着密集的完全连接层)和无顶部(移除密集的完全连接的层) . 我想知道如何为no_top权重训练模型

例如:我有一个架构,我想为它训练cifar10数据创建权重 . 那么如何训练呢?

1 回答

  • 0

    既然你在谈论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 :此处训练将更改所有图层的权重(预训练图层新图层) . 您可能希望在训练之前冻结预训练的层,以保持训练有素的重量 .

相关问题