我正在构建一个CNN来分类6个类别,有50x50像素的灰度图像(每类1400幅)。在对模型进行训练并对损失和精度进行评估后,似乎一切都运行良好,训练精度约为98%,损失降至3.0,但当对每个类别的测试数据进行评估时,该模型就很遥远了。我所拥有的是面部表情的形象: 1)愤怒,2)恐惧,3)快乐,4)中性,5)悲伤,意外
这是木星笔记本:edge.ipynb
例如,当我为每个类提供350个测试映像时,只能预测anger和suprise类。
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_images, y: test_labels, is_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发布于 2018-04-23 00:39:13
代码中有一些东西,但最重要的是,由于某种原因,它没有在is_training = False中运行。如果您设置is_training = True ,即使不训练,它也会给出可接受的结果。所以训练是可以的,但是评估不能正常进行。
为什么这是我现在不能回答的问题,但可能值得调查。
附在木星笔记本中的固定代码。我已经改变了很多小的东西,比如你拿了已经软最大值的软件,修正了,改变了随机的洗牌来使用numpy,改变了测试图像的加载来在加载时立即进行调整,等等。还有很多调试打印正在进行,很抱歉。:)
看起来合理,验证准确率为88% (训练准确率96.59%)。(也变成了10个时代。)
https://stackoverflow.com/questions/49971092
复制相似问题