我正在建立一个CNN,用50x50像素的灰度图像(每类1400个)对6个类进行分类。在训练模型并评估损失和准确性之后,一切似乎工作正常,训练精度达到98%左右,并且损失了到3.0,但是当在每个类的测试数据上评估模型时,模型就会消失。我的课程是面部表情的图像: 1)愤怒 2)恐惧 3)开心 4)中立 5)伤心 6)惊讶
这是Jupyter笔记本:https://www.floydhub.com/arse123/projects/cnn-1/20/code/train_edge.ipynb
例如,当我为每个班级提供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_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
答案 0 :(得分:2)
代码中有一些内容,但最重要的是,由于某些原因,它在is_training = False
时不起作用。如果您设置is_training = True
,即使未经过培训 ,也会提供可接受的结果。所以培训没问题,但评估运行不好。
现在为什么这是一个我现在无法回答的问题,但可能值得调查。
在Jupyter Notebook中附加固定代码。我已经改变了许多小东西,比如你采用已经Softmaxed值的Softmax,修正了,改变了随机改组以使用numpy,改变了加载测试图像以便在加载时立即调整大小等等。也有很多调试打印继续进行,抱歉。 :)
看起来合理,88%的验证准确度(训练准确率96.59%)。 (也改为10个时代。)