Python 训练精度和有效期精度较好,但预测精度较差

Python 训练精度和有效期精度较好,但预测精度较差,python,keras,deep-learning,neural-network,cnn,Python,Keras,Deep Learning,Neural Network,Cnn,我对我的CNN有一个胡说八道的问题。它在测试和验证数据上有很好的准确性,但在预测方面却非常糟糕,我不知道为什么 我有一个包含traningData和TestData的文件夹,每个文件夹有5个子文件夹名classA、classB。C类,D类,E类。他们都有相关的图片 -----这个问题的解决办法--------- 我发现了错误,这就是为什么我澄清了我的问题,使之更加清楚。因此,问题在于测试_生成器。我没有把shuffle=False, 因此,在测试_directory()中的_datagen.fl

我对我的CNN有一个胡说八道的问题。它在测试和验证数据上有很好的准确性,但在预测方面却非常糟糕,我不知道为什么

我有一个包含traningData和TestData的文件夹,每个文件夹有5个子文件夹名classA、classB。C类,D类,E类。他们都有相关的图片

-----这个问题的解决办法--------- 我发现了错误,这就是为什么我澄清了我的问题,使之更加清楚。因此,问题在于测试_生成器。我没有把shuffle=False, 因此,在测试_directory()中的_datagen.flow_时,必须将shuffle=False,这样样本就不会被洗牌,并且在预测时具有相同的顺序

非常感谢大家

test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(    
        rescale = 1./255,
        )

test_generator = test_datagen.flow_from_directory(
        directory="../newFlowers/TestData",
        target_size=(128, 128),
        color_mode="rgb",
        batch_size=8,
        class_mode="categorical",
        

    )

您的评估准确率为89.9%。我测试了我给你打印结果的代码,结果与我使用的模型和数据相符。请显示用于model.predict的代码。应该如下所示。请勿使用预测生成器拟合生成器或评估生成器,因为在tensorflow的未来版本中,将对其进行折旧。只需使用拟合、预测或评估

length=len(labels)
test_steps=  int(length/batch_size) +1
preds=model.predict(test_gen,  verbose=0, steps=test_steps)

看看你的preds打印出来的第一个预测应该是索引=4,这是E类,所以这是正确的,第二个预测指数的最高概率是1,这是B类,所以这是正确的,其余的也是正确的。你确定你的标签是labels=test\u gen.labels

你的测试数据与训练/验证的分布是否相同?这看起来不像是代码问题,更像是CNN优化问题。您需要提供更多的信息,以便尝试对此进行故障排除(网络结构、培训数据组成以及是否对此进行了说明、批量大小、历次之间的数据交换、批量标准化等)好的,让我分享一下。我已经添加了所有信息。test_labels=test_generator.labels是找到了解决方案并解释了它。非常感谢您的帮助。非常感谢你,祝你今天愉快。