【问题标题】:Different accuracy on same CNN同一CNN上的不同精度
【发布时间】:2021-08-13 09:30:17
【问题描述】:

我有这个 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))

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

    model.fit(trainImages, trainLabels, epochs = 10)

    predictionResult = model.predict(testImages)

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

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

    print(metrics.classification_report(testLabels, pred))

    print(metrics.confusion_matrix(testLabels, pred))

1)。每次运行 CNN 时,我的准确率都不同,介于 87% 和 93% 之间。当我运行相同的精度时,如何才能永久获得?我试过tensorflow.set_random_seed(),但没有效果。

2)。我应该在我的网络上进行哪些改进才能达到 95% 以上?输入具有形状 (224, 224, 3)。 2831 个训练图像和 665 个测试。 9个输出类。颜色识别问题。

【问题讨论】:

  • 1) 您是使用 GPU 还是 CPU 进行训练?使用 GPU,即使您设置了随机种子,cuda 也会产生一些可变性。尝试 os.environ["CUDA_VISIBLE_DEVICES"] = "-1" 并将种子设置为固定值。第二点不应该在这里发布,因为这是一个理论问题。也许在最先进的情况下寻找一些好的模型
  • 我正在使用 GPU。它有效,但我的时代现在需要更长的时间,从 7 秒到 61 秒。为什么? os.environ["CUDA_VISIBLE_DEVICES"] = "-1" 是什么意思?
  • @FaneSpoitoru os.environ["CUDA_VISIBLE_DEVICES"] = "-1" 基本上对 TensorFlow 隐藏了 GPU,因此您的模型将在 CPU 上进行训练,因此您永远不应该这样做。有关该主题的更多详细信息,您应该阅读this
  • @jackve 如果您要发布答案并且如果它有一些后果,那么您也必须发布它们,特别是在这种情况下,当将该环境变量设置为 -1 的后果很大时。

标签: python tensorflow deep-learning


【解决方案1】:

正如我在评论中发布的那样,这种行为的一种可能性是使用 GPU:cuda 引入了一些小的可变性,因此您可能会遇到以相同方式训练的两个模型的准确性的一些波动。您可以尝试禁用 GPU:

os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

并像以前一样设置种子。但是,这会限制您的表现,并且您将需要更多时间来完成相同的训练,因为您将只使用 CPU 而不是您的 GPU

【讨论】:

  • 有什么方法可以使用GPU,而且精度一样吗?
  • 我不知道,但请检查您的“问题”实际上是 GPU 的使用
猜你喜欢
  • 1970-01-01
  • 2021-10-20
  • 2017-09-17
  • 2020-05-23
  • 2019-08-28
  • 1970-01-01
  • 2013-09-23
  • 2014-06-03
  • 2022-11-03
相关资源
最近更新 更多