本文来自知乎问题 关于在CNN中文本预测sigmoid分类器训练准确率的问题?中笔者的做答,来做为Keras中多标签分类器的使用解析教程。app
关于在CNN中文本预测sigmoid分类器训练准确率的问题?
对于文本多标签多分类问题,目标标签形如[ 0 0 1 0 0 1 0 1 0 1 ]。在CNN中,sigmoid分类器训练、测试的准确率的判断标准是预测准确其中一个标签即为预测准确仍是怎样。如何使sigmoid分类器的准确率的判断标准为所有预测准确即为预测准确。有什么解决方案?测试
问题中提出的解决多标签多分类问题的解决方法是正确的。可是要注意几点,keras里面使用这种方式的acc是二进制acc,会把多标签当作单标签计算。spa
什么意思呢?举个例子,输入一个样本训练,共有十个标签,其中有两个为1,而你预测结果为所有是0,这时你获得准确率为0.8。最后输出的ac是全部样本的平均。能够看出这个准确率是不可信的。.net
解决方法以下:重写acc评价指标,笔者本身写了一个多标签分类的acc,一个样本里,只有所有标签都对应上才acc为1,有一个不对就为0。3d
acc是keras输出acc,my_acc是多标签acc,由于使用了数据加强,valacc更高。blog
因为每一个label的比例不一样,又测试不一样权重重写loss来对比。发现经过调整合适权重能够,相同参数下能够达到更优效果。教程
设置合适的权重值,val_acc上升了,val多标签acc也达到了更高。element