tensorflow - 为多标签分类评估 DNNClassifier
问题描述
我正在使用 tensorflow DNNClassifier 进行多标签分类,它使用准确度,因为它使用它的度量。我正在使用 sklearn f1 指标评估模型,该指标的分数很低。sklearn准确度的分数也很低。我的实现在某处有问题吗?
DNN分类器
embedding_feats = hub.text_embedding_column(key='text',
module_spec='https://tfhub.dev/google/universal-sentence-encoder/2',
trainable=False)
dnn = tf.estimator.DNNClassifier(
hidden_units=[512, 128],
feature_columns=[embedding_feats],
n_classes=11,
activation_fn=tf.nn.relu,
dropout=0.1,
optimizer=tf.train.AdagradOptimizer(learning_rate=0.005))
DNN 分类器训练输出。Val acc 为 0.40
Training for step = 8000
Train Time (s): 52.573952436447144
Eval Metrics (Train): {'accuracy': 0.44695774, 'average_loss': 1.516403, 'loss': 193.58235, 'global_step': 8200}
Eval Metrics (Validation): {'accuracy': 0.40303582, 'average_loss': 1.6520736, 'loss': 209.30502, 'global_step': 8200}
Sklearn F1成绩
f1_score(y_test,predictions_test,labels=le.classes_,average='weighted')
0.1066998393248964
Sklearn 准确度得分
accuracy_score(y_test, predictions_test)
0.11804138735062664
解决方案
一个可能的原因可能是您没有将预测转换为整数,即 0 或 1。您的神经网络正在根据记录属于 1 类的概率生成输出。如果您直接采用此概率并对其进行评估与您的y_test
,它们将不匹配,因为 0.98 不等于 1。
四舍五入predictions_test
到最接近的整数,即 <0.5 将是 0,>0.5 将是 1 并检查准确性。
推荐阅读
- android - 不删除存在多模式的 AVD 的问题
- lstm - ValueError:无法将输入数组从形状(126,5)广播到形状(126,1)
- python - 如何在 python 中获取 Google 之类的 url 摘录
- python - scipy.integrate.ode 放弃集成
- c# - 如何在.net core Api中逐块下载大文件
- wordpress - Wordpress - 需要搜索栏编码/插件
- python - 尝试得到凸性缺陷但得到错误
- docker-compose - 在 cypress docker-compose setup 上运行特定的规范文件
- typescript - 让赛普拉斯正确登录到 Auth0
- reactjs - 屏幕上仅显示 1 张卡片或 4 张卡片连续反应和 antd。帮助我是新手