python - Tensorflow - 仅模型预测 6 个类别中的 2 个类别

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

我正在构建一个 CNN,用 50x50 像素灰度图像(每类 1400 个)对 6 个类别进行分类。在训练模型并评估损失和准确度后,一切似乎都运行良好,训练准确度约为 98%,损失也有所下降到 3.0,但是当根据每个类别的测试数据评估模型时,模型相差甚远。我的类(class)是面部表情图像: 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%,所以我不知道这是怎么发生的。该模型是否有可能一直在这两个类别上进行训练?

@NOTE:图像和标签是一个热编码,也是随机洗牌,实现批量归一化

<小时/> 更新

<小时/>

我重新训练了模型,它具有相同的效果,但具有不同的类别。这次它更倾向于悲伤和惊讶,而不是愤怒和惊讶。 结果如下:

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_training = False 时它没有表现。如果您设置is_training = True即使没有训练,那么它也会给出可接受的结果。所以训练没问题,但评估运行不好。

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

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

看起来很合理,验证准确度为 88%(训练准确度为 96.59%)。 (也改为 10 epoch。)

train_edge_v2.ipynb

关于python - Tensorflow - 仅模型预测 6 个类别中的 2 个类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971092/

相关文章:

tensorflow - tf.Keras 自定义层输出形状为无

tensorflow - TFRecords 和记录改组

machine-learning - azure ML 如何给出训练模型时未使用的值的输出?

python - 随机森林的表现比其他方法好得多

python - 复杂的注释和聚合查询

python - 空字典作为python函数: dictionary seems to not be initialised to {} on subsequent calls?中关键字参数的默认值

python - GCP Dataproc 自定义镜像 Python 环境

python - 自定义记录器类 python : How to make it work across classes?

python - 如何将 Keras .h5 导出到 tensorflow .pb?

python - 什么 tensorflow 分布来表示分类数据列表