python - 用于行准确性的自定义 keras 指标
问题描述
我有一个多标签分类问题:以下是 y 的一些示例:
[0,0,0]
[0,0,1]
[1,0,1]
[1,1,0]
[1,0,0]
等等。我想创建一个函数,告诉我预测中的行百分比,基于 0.5 阈值,等于 y 中的真实向量。所以如果 y 是:
[[0,0,1]
[1,0,0]
[1,0,1]]
和预测是:
[[0.2,0.4,0.9]
[0.6,0.3,0.4]
[0.3,0.3,0.4]]
准确率是 2/3,因为两行预测相同的标签,而 1 不是。
这就是我现在所拥有的:
def accuracy(y_true, y_pred):
acc = K.all(K.equal(y_true, y_pred), axis=1)
acc= K.cast(acc, 'float32')
acc = K.sum(acc)
acc = acc/K.cast(K.shape(y_true)[0], 'float32')
return acc
但它在训练期间向我显示了消息并显示精度为 0:
Allocation of 223027200 exceeds 10% of system memory.
y_train 和 y_test 的形状是: (1285, 3) (551, 3)
X_train 的形状:(1285, 70, 70, 1)
解决方案
任何需要它的人的解决方案:
def accuracy(y_true, y_pred):
y_pred = K.round(y_pred)
acc = K.all(K.equal(y_true, y_pred), axis=1)
acc= K.cast(acc, 'float32')
acc = K.sum(acc)
acc = acc/K.cast(K.shape(y_true)[0], 'float32')
return acc
推荐阅读
- c++ - 如何在同时作为输入参数的函数中分配数组?
- kubernetes - kubectl 创建秘密通用 InternalError PermissionDenied
- google-chrome - 请求方法未在 chrome 检查器中显示
- amazon-web-services - 使用 SAM cli 和 AWS CDK 在本地调试时找不到 AWS lambda 模块错误?
- php - 正则表达式从最后一个开始提取所有特定长度的数字
- c - 为什么将元素分配给未调整大小的数组会更改 c 中分配的元素?
- reactjs - 谷歌应用引擎部署我所有的反应文件甚至源
- bash - 即使使用 bash 命令(类似于 grep)被字符分割,如何获得模式的匹配?
- mapbox - Mapbox Android - 如何在给定边界区域和缩放 lvl 的情况下访问矢量平铺数据?
- webpack - webpack 或 babel-loader 在 node_modules 中找不到模块,这是 node_modules 中另一个模块所需要的