首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >损失的大幅度增加怎么会导致准确性的提高?

损失的大幅度增加怎么会导致准确性的提高?
EN

Data Science用户
提问于 2019-10-01 14:15:05
回答 2查看 46关注 0票数 0

我正在试验NLP,目前,我正试图提出一个翻译模式,将英语句子转换成法语句子。我正在使用这个数据集(并不是说它是相关的):

https://github.com/udacity/deep-learning/raw/master/language-translation/data

它由137 K以上的句子组成。我的模型是一个编码器-译码器LSTM,注意在Keras中实现.下面是我绘制的验证损失和准确性图表:

这两个精度指标是我自己开发的自定义的。但是它们基于同样的Keras的categorical_accuracy

现在,我的问题是,为什么我得到了一个改进的准确性,而损失值是得到wrose?

而且,这样的模式值得信赖吗?

EN

回答 2

Data Science用户

发布于 2021-03-02 17:16:04

检查填充值是否在计算精度的同时得到考虑,情况不应该是这样的。您应该为填充值创建掩码,并在计算精度时使用该掩码。例如,虽然填充区域的y_true值是0,y_pred的值也是0,但是y_true == y_pred算作了正确的预测,影响了总体精度。这是错误的,您应该做的是定义一个自定义精度度量,它执行以下操作:

代码语言:javascript
复制
correct = y_pred == y_true
mask = tf.cast(tf.cast(y_true, tf.bool), tf.int16)
accuracy = tf.reduce_sum(correct * mask)/tf.reduce_sum(mask)

希望这能给你一个正确的衡量标准。

票数 0
EN

Data Science用户

发布于 2022-01-30 18:27:28

我不知道这是不是你的案子的原因。但通常情况下,如果产生的概率不确定,则更大(更糟)的log_loss可能对应于更大(更好)的accuracy

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import log_loss, accuracy_score

random = np.random.RandomState(41)
y = np.array([0]*50 + [1]*50)

probas1= np.concatenate([[0]*30, random.uniform(size=40), [1]*30])
probas2= np.concatenate([random.normal(loc=0.48, scale=0.01, size=50),
                         random.normal(loc=0.52, scale=0.01, size=50)])

print(log_loss(y, probas1), accuracy_score(y, probas1>0.5))
print(log_loss(y, probas2), accuracy_score(y, probas2>0.5))

>>> 0.31286642799863323 0.83
>>> 0.6536974952243071 0.99

plt.hist(y, label='True classes');
plt.hist(probas1, label='Better log_loss, worse accuracy')
plt.hist(probas2, label='Worse log_loss, better accuracy')
plt.legend()
票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/61099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档