当前位置: 首页 > 知识库问答 >
问题:

部署CNN:训练和测试精度高但预测精度低

袁成化
2023-03-14

刚从ML开始,创建了我的第一个CNN来检测人脸图像的方位。我得到的训练和测试精度高达约96-99%超过2组不同的1000张图片(128x128RGB)。然而,当我自行从测试集中预测一个图像时,模型很少预测正确。我认为在测试和预测期间,我将数据加载到模型中的方式肯定有区别。下面是我如何将数据加载到模型中进行训练和测试:

datagen = ImageDataGenerator()
train_it = datagen.flow_from_directory('twoThousandTransformed/', class_mode='categorical', batch_size=32, color_mode="rgb", target_size=(64,64))
val_it = datagen.flow_from_directory('validation/', class_mode='categorical', batch_size=32, color_mode="rgb", target_size=(64,64))
test_it = datagen.flow_from_directory('test/', class_mode='categorical', batch_size=32, color_mode='rgb', target_size=(64,64))

下面是我如何加载图像来进行预测:

image_path='inputPicture/02001.png'
image = tf.keras.preprocessing.image.load_img(image_path)
input_arr = keras.preprocessing.image.img_to_array(image)
reshaped_image = np.resize(input_arr, (64,64,3))
input_arr = np.array([reshaped_image]) 
predictions = model.predict(input_arr)
print(predictions)
classes = np.argmax(predictions, axis = 1)
print(classes)

ImageDataGenerator处理图像的方式与我在预测中处理图像的方式肯定有一些不同。你们能帮个白痴吗?谢谢!

编辑:下面是我的模型

imageInput = Input(shape=(64,64,3))
conv1 = Conv2D(128, kernel_size=16, activation='relu')(imageInput)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(64, kernel_size=12, activation='relu')(pool1)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
conv3 = Conv2D(64, kernel_size=4, activation='relu')(pool2)
pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)
flat = Flatten()(pool3)
hidden1 = Dense(16, activation='relu')(flat)
hidden2 = Dense(16, activation='relu')(hidden1)
hidden3 = Dense(10, activation='relu')(hidden2)
output = Dense(4, activation='softmax')(hidden3)
model = Model(inputs=imageInput, outputs=output)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_it, steps_per_epoch=16, validation_data=val_it, validation_steps=8, epochs=25)
print('here we go!')
_, accuracy = model.evaluate(test_it)
print('Accuracy: %.2f' % (accuracy*100))

共有1个答案

上官鸿朗
2023-03-14

您可以尝试的一件事是复制所选择的图像,使其与您训练模型时使用的批处理大小相似。而且,由于训练精度如此之高,看来你的模型一定是过拟合的。因此,如果第一件事不起作用,尝试添加dropout或减少网络中的层数。

 类似资料:
  • 我有一个神经网络,它对3个输出进行分类。我的数据集非常小,我有340张火车图像和60张测试图像。我构建了一个模型,当我编译时,我的结果是: 纪元97/100 306/306 [==============================] - 46s 151ms/阶跃损失: 0.2453-精度: 0.8824-val_loss: 0.3557-val_accuracy: 0.8922纪元98/10

  • 我目前正在建立一个卷积神经网络来区分清晰的心电图像和有噪声的心电图像。 带噪声: 无噪音: 下面是我用来预测训练模型的代码。 我不知道为什么会发生这种情况,即使我从未使用相同的图像进行测试、验证或培训。有人能帮我一下吗?我尝试了所有的方法,用不同的超参数训练模型,但每次这个模型都输出。

  • 我使用TensorFlow和数据集实现了一个logistic回归模型。我想出了如何使用以下代码获得学习算法的总精度... 这工作良好,打印精度为91%。现在我正在恢复模型,并将单个图像传递到模型中以进行预测。我传递了一张数字7的图片,,它正确地预测了它->... 现在我想要得到这个预测的准确性与模型的关系,但我不确定如何继续,我尝试了以下显然不起作用的...

  • 实际的y值是y=[0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 1. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.

  • 这是我当前抓取图像类型的代码。一旦它检测到了狗,我会试着让它看到检测的准确性。希望这有道理?

  • 我有一个只有完全连接/密集层的深度网络,形状为128-256-512-1024-1024所有层使用激活,没有,最后一层使用激活。 在第20次训练后,验证/测试损失开始逆转并上升,但测试精度也在继续提高。这怎么说得通?如果显示了新的数据,测试的准确性是否准确,或者是否存在某种假阳性? 我这样编译模型: