首页 > 解决方案 > 迁移学习(VGG16)在 CIFAR-10 上表现更差是正常的吗?

问题描述

注意:我不确定这是提出此类问题的正确网站。请告诉我在否决这个“因为这不是问的正确地方”之前我应该​​在哪里问他们。谢谢!

我目前正在尝试使用Keras进行深度学习。我已经尝试了一种类似于Keras 示例中的模型。这会产生预期的结果:

在此之后,我想尝试迁移学习。我通过使用VGG16网络而不重新训练其权重来做到这一点(参见下面的代码)。这给出了非常差的结果:10 个时期后的准确度为 63%,曲线非常浅(见下图),这似乎表明只有在很长的训练时间后(如果有的话)才能达到可接受的结果(我预计 200- 300 个 epoch 才达到 80%)。

迁移学习结果

这是这种应用程序的正常行为吗?以下是我可以想象的导致这些不良结果的原因:

提前致谢!


我的代码:

请注意,输入是 2 个数据集(50000 个训练图像和 10000 个测试图像),它们被标记为形状为 的图像32x32x3。每个像素值都是 range 中的浮点数[0.0, 1.0]

import keras

# load and preprocess data...

# get VGG16 base model and define new input shape
vgg16 = keras.applications.vgg16.VGG16(input_shape=(32, 32, 3),
                                       weights='imagenet',
                                       include_top=False)

# add new dense layers at the top
x = keras.layers.Flatten()(vgg16.output)
x = keras.layers.Dense(1024, activation='relu')(x)
x = keras.layers.Dropout(0.5)(x)
x = keras.layers.Dense(128, activation='relu')(x)
predictions = keras.layers.Dense(10, activation='softmax')(x)

# define and compile model
model = keras.Model(inputs=vgg16.inputs, outputs=predictions)
for layer in vgg16.layers:
    layer.trainable = False
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# training and validation
model.fit(x_train, y_train,
          batch_size=256,
          epochs=10,
          validation_data=(x_test, y_test))

model.evaluate(x_test, y_test)

标签: pythonkerasdeep-learningimage-recognitiontransfer-learning

解决方案


我认为 CIFAR-10 数据集具有 32x32 像素的图像,这对于 VGG16 网络来说可能太少了该程序不兼容 CIFAR-10 使用


推荐阅读