使用相同的数据进行验证和预测,但准确性较低

发布于 2025-01-13 23:27:42 字数 2373 浏览 4 评论 0原文

我有一个 CNN 模型。 我将一个数据集分为训练集和验证集。 在我使用它们训练 CNN 模型 50 个 epoch 后,我的验证准确度为 0.99。 但训练后,我使用相同的验证集和训练好的模型进行预测,得到的准确率较低,只有0.49。 我不知道我的代码是否错误。

我的验证准确性

model_zero = models.Sequential()
model_zero.add(layers.experimental.preprocessing.Rescaling(1./255))
model_zero.add(layers.Conv2D(32, (3, 3),padding = 'same', input_shape = (64, 64, 3)))
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))

model_zero.add(layers.Conv2D(32, (3, 3),padding = 'same'))
model_zero.add(layers.BatchNormalization())
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))
model_zero.add(layers.Conv2D(64, (3, 3),padding = 'same'))
model_zero.add(layers.BatchNormalization())
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))

model_zero.add(layers.Conv2D(64, (3, 3),padding = 'same'))
model_zero.add(layers.BatchNormalization())
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))

model_zero.add(layers.Flatten())
model_zero.add(layers.Dense(128, activation='relu'))
model_zero.add(layers.Dense(num_classes, activation='softmax'))
model_zero.build(input_shape = (None, 64, 64, 3))

model_zero.compile(optimizer = 'adagrad',
        loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics = ['accuracy'])
    
training_zero_data = training_zero_data.shuffle(20)
kfold_Xtrain = training_zero_data.take(125)
kfold_Ytrain = training_zero_data.skip(125).take(63)
epochs = 30
history = model_zero.fit(kfold_Xtrain, epochs = epochs,
                      validation_data = kfold_Ytrain, verbose=1)
predict_zero = model_zero.predict(kfold_Ytrain)
predict_zero = np.argmax(predict_zero, axis=1)
labels_zero =  np.array([])
for x, y in kfold_Ytrain:
    labels_zero = np.concatenate([labels_zero, y.numpy()])

cnn_zero_kfold_cm.append(confusion_matrix(labels_zero, predict_zero))
cnn_zero_kfold_accuracy.append(accuracy_score(labels_zero, predict_zero))
cnn_zero_kfold_recall.append(recall_score(labels_zero, predict_zero, average=None))
cnn_zero_kfold_precision.append(precision_score(labels_zero, predict_zero, average=None))
if acc1 < accuracy_score(labels_zero, predict_zero):
    c1 = model_zero
    acc1 = accuracy_score(labels_zero, predict_zero)
  

I have a CNN model.
And I split one dataset into the training set and the validation set.
After I used them to train my CNN model for 50 epochs, my validation accuracy was 0.99.
But after training, I used the same validation set and the trained model to predict, I got a lower accuracy, which is only 0.49.
I don't know whether my code is wrong or not.

My validation accuracy

model_zero = models.Sequential()
model_zero.add(layers.experimental.preprocessing.Rescaling(1./255))
model_zero.add(layers.Conv2D(32, (3, 3),padding = 'same', input_shape = (64, 64, 3)))
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))

model_zero.add(layers.Conv2D(32, (3, 3),padding = 'same'))
model_zero.add(layers.BatchNormalization())
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))
model_zero.add(layers.Conv2D(64, (3, 3),padding = 'same'))
model_zero.add(layers.BatchNormalization())
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))

model_zero.add(layers.Conv2D(64, (3, 3),padding = 'same'))
model_zero.add(layers.BatchNormalization())
model_zero.add(layers.Activation('relu'))
model_zero.add(layers.MaxPooling2D((2, 2)))

model_zero.add(layers.Flatten())
model_zero.add(layers.Dense(128, activation='relu'))
model_zero.add(layers.Dense(num_classes, activation='softmax'))
model_zero.build(input_shape = (None, 64, 64, 3))

model_zero.compile(optimizer = 'adagrad',
        loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics = ['accuracy'])
    
training_zero_data = training_zero_data.shuffle(20)
kfold_Xtrain = training_zero_data.take(125)
kfold_Ytrain = training_zero_data.skip(125).take(63)
epochs = 30
history = model_zero.fit(kfold_Xtrain, epochs = epochs,
                      validation_data = kfold_Ytrain, verbose=1)
predict_zero = model_zero.predict(kfold_Ytrain)
predict_zero = np.argmax(predict_zero, axis=1)
labels_zero =  np.array([])
for x, y in kfold_Ytrain:
    labels_zero = np.concatenate([labels_zero, y.numpy()])

cnn_zero_kfold_cm.append(confusion_matrix(labels_zero, predict_zero))
cnn_zero_kfold_accuracy.append(accuracy_score(labels_zero, predict_zero))
cnn_zero_kfold_recall.append(recall_score(labels_zero, predict_zero, average=None))
cnn_zero_kfold_precision.append(precision_score(labels_zero, predict_zero, average=None))
if acc1 < accuracy_score(labels_zero, predict_zero):
    c1 = model_zero
    acc1 = accuracy_score(labels_zero, predict_zero)
  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文