tensorflow - 用于多标签分类的 keras 自定义指标
问题描述
我正在使用sigmoid
andbinary_crossentropy
进行多标签分类。
例如,标签y_true
是like [1,0,1,0,0]
,标签y_pred
是like [0.8,0.3,0.9,0,0]
。
如何设置 Keras 自定义度量函数,使y_pred
大于 0.5 的每个元素映射为 1,y_pred
小于 0.5 的每个元素映射为 0,然后比较y_pred
匹配的标签数y_true
?
解决方案
由于您正在进行多标签分类,因此您似乎希望将整个真实标签和预测标签相互比较。例如,对于一个具有真实标签[1, 0, 0]
和预测标签的单个样本,[0, 0, 0]
您认为预测准确度为零(尽管第二类和第三类的标签已被正确预测)。如果是这种情况,您可以比较标签,然后使用all()
后端的方法来确保所有类的标签彼此匹配:
from keras import backend as K
def full_multi_label_metric(y_true, y_pred):
comp = K.equal(y_true, K.round(y_pred))
return K.cast(K.all(comp, axis=-1), K.floatx())
推荐阅读
- c# - System.Runtime.Serialization.InvalidDataContractException 'System.Security.Cryptography.X509Certificates.X509Certificate2'
- angular - JSON 解析错误:无法反序列化 java.lang.Long 的实例超出 START ARRAY 令牌
- python-3.x - 我收到 pyzipper {NameError}name 'self' is not defined 和 {NameError}name 'parent_module' is not defined 的错误
- apache-kafka - 使用 docker-compose 在多个节点上的 Kafka 集群
- javascript - 带有时间戳字段的 Firestore startAt 不起作用
- json - Cloudformation 中的 Cloudwatch 仪表板错误
- javascript - 处理 Web 套接字异步请求时保持数据最新的最佳方法
- c# - 无法理解线程 C# 的行为
- angular - 使用 Angular 11 以反应形式的动态值返回 null
- apache-kafka-streams - spring-cloud-stream 示例项目引发 KafkaStreamsFunctionProcessor 的 NoSuchBeanDefinitionException