Keras中categorical_accuracy指标的输出含义咨询
理清Keras训练返回值与metrics的对应关系
嘿,其实你已经抓到了最关键的线索——model.metrics_names!这个属性直接帮你精准对应train_on_batch(包括fit这类训练方法)返回的每个数值到底代表什么:
- 返回的第一个数值永远是你编译时指定的损失函数结果(也就是你例子里的
categorical_crossentropy),对应metrics_names列表的第一个元素loss - 返回的第二个数值就是你指定的评估指标的计算结果,对应
metrics_names列表的第二个元素
拿你的场景举例:
- 当你用
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])编译时,model.metrics_names会输出['loss', 'accuracy'],所以tr_loss, tr_acc = model.train_on_batch(X, Y)里的tr_acc就是通用准确率的计算值 - 当你换成
metrics=['categorical_accuracy']时,model.metrics_names变成['loss', 'categorical_accuracy'],这时候返回的第二个数值就是分类专属准确率的结果
顺便补充个小知识点帮你区分这两个准确率:
accuracy是个“智能”的通用指标,Keras会自动根据你的标签格式适配计算逻辑——如果标签是独热编码(比如多分类里每个样本对应一个只有正确类别为1的向量),它和categorical_accuracy结果完全一致;如果标签是整数形式(比如直接用0、1、2代表类别),它会自动切换成sparse_categorical_accuracy的计算方式categorical_accuracy则是专门为独热编码标签设计的,只有当标签是这种格式时,它的计算才是准确的
总结一下:以后不确定返回值含义时,直接打印model.metrics_names,列表里的元素顺序和训练方法返回的数值顺序完全对应,再也不用瞎猜啦~
内容的提问来源于stack exchange,提问作者Boppity Bop
相关产品推荐
相关产品推荐

