1、首先训练CNN,50个epoch,保存模型结果
2、用上面训练好的模型去提取fer数据集最后一层的特征(7个类)
3、用同样的CNN网络去训练FER2013plus数据集,由于数据集得到优化,准确率得到很大提升
4、用上面训练好的模型去提取fer2013plus数据集最后一层特征(8个类)
5、用第3步训练好的模型去提取fer2013plus数据集倒数第2层特征(每个特征为128维的向量)
6.CNN训练FER2013+,在valid验证集上的混淆矩阵:
从精确率(precision)来分析,可以看出,happy和suprised的精确率最高,分别为0.87和0.8,在fear和sad上较低,分别为0.53和0.59,在contempt上识别率为0
从召回率(recall)或者灵敏度(sensitive)来看,disgust的召回率只有0.08
从F1-score来看,即精确率和召回率的调和平均数,因此一般将F1-score作为最终评定指标:
F
1
−
s
c
o
r
e
=
(
2
∗
p
r
e
c
i
s
i
o
n
∗
r
e
c
a
l
l
)
/
(
p
r
e
c
i
o
s
i
o
n
+
r
e
c
a
l
l
)
F1-score = (2*precision*recall)/(preciosion+recall)
F1−score=(2∗precision∗recall)/(preciosion+recall),contempt和disgust比较低,anger,fear,sad差强人意,happy,neural和surprised表现亮眼。
又重新训练一次CNN,这次生成的混淆矩阵如下:
再次训练的结果和上次差不太多,从F1-score来看,依旧是happy,neural和surprised高,anger,fear,sad中,contempt和disgust低。出现这样的结果,猜测原因之一是contempt和disgust的val样本量太少。
从混淆矩阵来看,和训练的准确率还是符合的,用预测正确的样本量/总的样本量:
(
203
+
19
+
776
+
989
+
163
+
353
)
/
3199
=
0.7824
(203+19+776+989+163+353)/3199=0.7824
(203+19+776+989+163+353)/3199=0.7824
可能纠结的点在于,contempt和disgust这两个类上识别率太低,甚至为0。