【问题标题】:no_top weights for keras modelskeras 模型的 no_top 权重
【发布时间】:2018-02-16 10:30:04
【问题描述】:

预训练的深度学习模型有两种相关的权重,top(表示密集的全连接层)和 without_top(删除密集的全连接层)。我想知道如何为 no_top 权重训练模型

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

【问题讨论】:

    标签: deep-learning keras conv-neural-network


    【解决方案1】:

    既然你说的是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))
    

    注意:这里的训练会改变你所有层的权重(预训练层 + 新层)。您可能希望在训练之前冻结预训练层,以保持它们经过良好训练的权重。

    【讨论】:

    • 我的问题是如何创建没有顶层的预训练模型。
    猜你喜欢
    • 2019-01-30
    • 2020-12-05
    • 2018-06-21
    • 2019-05-20
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多