keras - 如何在 Keras 中将精度定义为损失函数?
问题描述
众所周知,keras 中的 sparse_categorical_crossentropy 可以得到每个类别之间的平均损失函数。但是,如果我最关心的只是一个特定的类别呢?比如如果我想将基于这个类别的精度(=TP/(TP+FP))定义为损失函数,我该怎么写呢?谢谢!</p>
我的代码就像:
from keras import backend as K
def my_loss(y_true,y_pred):
y_true = K.cast(y_true,"float32")
y_pred = K.cast(K.argmax(y_pred),"float32")
nominator = K.sum(K.cast(K.equal(y_true,y_pred) & K.equal(y_true, 0),"float32"))
denominator = K.sum(K.cast(K.equal(y_pred,0),"float32"))
return -(nominator + K.epsilon()) / (denominator + K.epsilon())
错误是这样的:
argmax is not differentiable
解决方案
我不建议您使用精度作为损失函数。
- 不能将其设置为 nn 的损失函数是不可微的。
- 您可以通过将所有实例预测为负类来最大化它,这是没有意义的。
一种替代解决方案是使用 F1 作为损失函数,然后手动调整概率截止以获得理想的精度水平,并且召回率不会太低。
推荐阅读
- javascript - node.js 无法从 ionic 4 发出 post 请求
- html - VBA。从站点解析数据
- ruby - ruby MS windows gem:win32/daemon:Service_Main线程异常退出
- nginx - Nginx 的 sub_filter 不会替换 CSS 和 JS 中的路径
- android - 棒棒糖设备上未安装 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 应用程序
- c# - ASP Net Core / Entity Framework 表单保存错误
- regex - 正则表达式完全匹配 - 数据表
- mongodb - 根据文档中存储的参数查找匹配的文档
- symfony - Symfony / Twig 数据库查询过多
- javascript - append() 函数在网页中不起作用