Tensorflow - 仅模型预测6个

时间:2018-04-22 21:52:09

标签: python tensorflow machine-learning neural-network conv-neural-network

我正在建立一个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

1 个答案:

答案 0 :(得分:2)

代码中有一些内容,但最重要的是,由于某些原因,它在is_training = False时不起作用。如果您设置is_training = True ,即使未经过培训 ,也会提供可接受的结果。所以培训没问题,但评估运行不好。

现在为什么这是一个我现在无法回答的问题,但可能值得调查。

在Jupyter Notebook中附加固定代码。我已经改变了许多小东西,比如你采用已经Softmaxed值的Softmax,修正了,改变了随机改组以使用numpy,改变了加载测试图像以便在加载时立即调整大小等等。也有很多调试打印继续进行,抱歉。 :)

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

train_edge_v2.ipynb