Python Tensorflow-模型仅预测6类中的2类

Python Tensorflow-模型仅预测6类中的2类,python,tensorflow,machine-learning,neural-network,conv-neural-network,Python,Tensorflow,Machine Learning,Neural Network,Conv Neural Network,我正在建立一个CNN,用50x50像素的灰度图像对6个类别进行分类(每类1400张)。。在训练模型并评估损失和准确度后,一切似乎都很正常,训练准确度约为98%,损失降至3.0,但在根据每个类的测试数据评估模型时,模型已经偏离了方向。我的课程是面部表情图像: 1) 愤怒 2) 恐惧 3) 高兴的 4) 中立的 5) 悲哀的 6) 惊奇 这是Jupyter笔记本: 例如,当我为每一类输入350张测试图像时,只有愤怒和惊喜类被预测到 TEST IMAGES

我正在建立一个CNN,用50x50像素的灰度图像对6个类别进行分类(每类1400张)。。在训练模型并评估损失和准确度后,一切似乎都很正常,训练准确度约为98%,损失降至3.0,但在根据每个类的测试数据评估模型时,模型已经偏离了方向。我的课程是面部表情图像: 1) 愤怒 2) 恐惧 3) 高兴的 4) 中立的 5) 悲哀的 6) 惊奇

这是Jupyter笔记本:

例如,当我为每一类输入350张测试图像时,只有愤怒惊喜类被预测到

    TEST IMAGES                   RESULTS
    Angry -    it classified 76 angry, and 273 surprise

    Fear -     it classified 8 angry and 342 surprise

    Happy -    12 angry and 338 surprise

    Neutral -   350 surprise

    Sad -       22 angry and 328 surprise

    Surprise - a full 350/350 classified for this one.. 
很明显,人们对愤怒和惊讶有一定的偏见,因为没有一张图片被分类过

当我运行
acc.eval({x:test\u images,y:test\u labels,is\u training:False})
(每个类对应2100个图像)在训练后,我得到了82%的准确率,所以我不知道这是怎么发生的。模型是否可能一直在这两门课上训练

@注:图像和标签是一个热编码,也随机洗牌,批量标准化实施


更新


我重新训练了这个模型,它有着相同的影响,但课程不同。这一次,它喜欢悲伤和惊讶,而不是愤怒和惊讶。 结果如下:

Angry - Sad 259 and surprise 75
Fear - Sad 118 and surprise 218 (some classifications missing here for some reason)
Happy - Sad 167 times and suprise 160 times (same again, missing some classifications)
Neutral - sad 94 and surprise 249
Sad - sad 211 and surprise 122
Surprise - Sad 284 and surprise 52

代码中有一些东西,但最重要的是,由于某种原因,当
is\u training=False
时,它不起作用。如果设置
is_training=True
,即使未进行培训,也会给出可接受的结果。所以培训是可以的,但是评估不是很好

我现在无法回答这个问题,但可能值得调查

在Jupyter笔记本中附加固定代码。我已经改变了很多小事情,比如你取了已经设置为最大值的最大值,修正了这个问题,改变了随机洗牌以使用numpy,改变了加载测试图像以在加载后立即调整大小,等等。还有很多调试打印正在进行,对此表示抱歉。:)

看起来合理,验证准确率为88%(培训准确率为96.59%)。(也改为10个时代。)


看起来您的标签上的单元格[5]有相同的热编码。。。这是真的吗?是的,它们是一个热编码的,但这只是它们看起来几乎相同的机会,我检查了标签[0:100],标签被正确地洗牌了