You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Colab运行相同CNN代码准确率远低于本地环境问题咨询

车辆颜色分类CNN模型本地与Colab准确率差异原因分析

问题背景

用于车辆颜色分类的CNN实现代码如下:

def cnn(trainImages, trainLabels, testImages, testLabels):
    trainImages = np.array(trainImages)
    trainLabels = np.array(trainLabels)
    testImages = np.array(testImages)
    testLabels = np.array(testLabels)

    trainImages = trainImages / 255
    testImages = testImages / 255

    model = Sequential()

    model.add(Conv2D(filters = 32, kernel_size = (3, 3), padding = 'same', activation = 'relu', input_shape = (224, 224, 3)))
    model.add(MaxPool2D(pool_size = (2, 2), strides = (2, 2)))

    model.add(Conv2D(filters = 64, kernel_size = (3, 3), padding = 'same', activation = 'relu'))
    model.add(MaxPool2D(pool_size = (2, 2), strides = (2, 2)))

    model.add(Conv2D(filters = 128, kernel_size = (3, 3), padding = 'same', activation = 'relu'))
    model.add(MaxPool2D(pool_size = (2, 2), strides = (2, 2)))

    model.add(Flatten())

    model.add(Dense(256, activation = 'relu'))
    model.add(Dense(9))

    opt = Adam(learning_rate = 0.001)

    model.compile(optimizer = opt, loss = tensorflow.keras.losses.SparseCategoricalCrossentropy(from_logits = True), metrics = ['accuracy'])

    model.fit(trainImages, trainLabels, epochs = 20, batch_size = 64)

    predictionResult = model.predict(testImages)

    pred = []
    for i in range(len(predictionResult)):
        pred.append(np.argmax(predictionResult[i], axis = -1))

    vehicles = ['Black Vehicles', 'Blue Vehicles', 'Brown Vehicles', 'Green Vehicles', 'Pink Vehicles', 'Red Vehicles', 'Silver Vehicles', 'White Vehicles', 'Yellow Vehicles']

    print('Accuracy: ', metrics.accuracy_score(testLabels, pred))

    print(metrics.classification_report(testLabels, pred, target_names = vehicles))

    print(metrics.confusion_matrix(testLabels, pred))

该模型本地运行测试集准确率可达93%,在Google Colab平台运行时最终测试准确率仅为10%,训练过程中前3个epoch训练准确率快速从10%上升到90%以上。

诱因分析

  • 测试集图像与标签顺序不匹配:9类分类任务随机猜测准确率约为11%,与观测到的10%测试准确率高度吻合。如果Colab环境加载测试集时,图像的读取顺序和对应标签的存储顺序不一致,会导致预测结果和真实标签完全无法对齐,出现接近随机的准确率,这是最高概率的诱因。
  • 标签编码映射不一致:本地训练时的类别编码顺序(如0对应黑车、1对应蓝车)如果和Colab环境下的编码顺序不一致,即使模型预测正确,后续调用classification_report时传入的vehicles列表顺序和Colab的标签编码不匹配,也会导致准确率计算结果错误。
  • 数据集划分逻辑差异:本地运行时可能设置了固定随机种子来划分训练/测试集,保证分布一致;如果Colab运行时没有设置相同的随机种子,可能出现训练集和测试集分布严重偏移,最终泛化效果极差。
  • 图像输入通道顺序错误:如果本地用OpenCV读取图像(默认BGR通道顺序),Colab上用PIL读取图像(默认RGB通道顺序),输入模型的颜色通道完全颠倒,会导致模型初始学习速度慢,即使训练集准确率上升,也无法泛化到测试集。
  • 框架版本差异:本地TensorFlow/Keras版本与Colab默认版本不同,部分API的默认参数发生变化(如卷积层的初始化策略、Adam优化器的默认参数、损失函数的计算逻辑等),都会导致训练效果不一致。
  • 预处理逻辑不一致:如果本地加载的原始图像是uint8类型(0-255取值),代码中/255归一化逻辑正确;如果Colab环境读取的图像已经被预处理为0-1取值范围,再次/255会将输入压缩到0-0.0039的极小范围,模型很难学习到有效特征,最终泛化能力差。

内容的提问来源于stack exchange,提问作者Fane Spoitoru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:54:04