我已经在我的数据集上试验了 Keras 中可用的许多模型。这是一个 10 类图像分类问题。我尝试过从头开始训练,微调整个网络并使用每种架构进行迁移学习。它们中的大多数在我的数据集上表现都很好,除了 Resnet50 的迁移学习。这是我正在使用的模型:
model = applications.resnet50.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
for layer in model.layers:
layer.trainable = False
x = model.output
x = Flatten()(x)
x = Dense(128, activation="relu")(x)
x = Dropout(0.3)(x)
x = Dense(128, activation="relu")(x)
x = Dropout(0.3)(x)
x = Dense(128, activation="relu")(x)
x = Dropout(0.3)(x)
x = Dense(128, activation="relu")(x)
predictions = Dense(output_dim=10, activation="softmax")(x)
model_final = Model(input=model.input, output=predictions)
所有图像都已调整为 (224 x 224) 像素大小。我尝试了具有各种学习率和批量大小的亚当优化器,例如:
lr=0.00001, batch=64
lr=0.00005, batch=256
lr=0.001, batch=256
lr=0.001, batch=128
lr=0.001, batch=64
lr=0.001, batch=32
lr=0.0001, batch=64
lr=0.0001, batch=32
lr=0.0001, batch=128
但该模型仍然预测所有图像属于同一类,具体而言,该类包含所有图像的 26%。训练时,训练损失减少,验证损失似乎增加。训练结束时训练准确率在 95% 以上,但验证准确率停留在 26%。当同一个模型(Resnet50)从零开始训练或微调时,这个问题就不存在了。没有跳跃连接的模型(例如 InceptionV3、Xception、VGG16)一直表现出良好的性能,无论是从头开始训练、微调还是使用迁移学习。使用跳跃连接的其他模型(InceptionResnetV2、DenseNet)在使用迁移学习时不会预测所有图像属于同一类,但与“无跳跃连接”模型相比,准确度要低一些。再次,
所以我的问题是,
使用迁移学习时,跳过连接是否会损害模型的性能?
我正在使用带有 tensorflow 后端的 Keras。