python - 不清楚使用 keras.utils 中的 to_categorical
问题描述
我的标签就像
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
我有10节课。所以为此
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
我应该得到1。但我的输出就像
[[1. 0.]
[0. 1.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]
我对此很陌生,请您解释一下为什么会发生这种情况以及正确的方法是什么。
解决方案
您的数据已经采用 one-hot 编码格式。
to_categorical 将标签编码数据转换为 one-hot 编码格式:
示例:
y = [2,4,5]
num_classes = 10
keras.utils.to_categorical([y],10)
#output
#array([[[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]]], dtype=float32)
给定输入,y = 1 和 num_classes = 10,它将给出输出 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
从你的问题看来你想转换一个热( [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]) 编码为原始类标签编码格式。
为此,您可以使用np.argmax()如下:
import numpy as np
one_hot_y = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
label_encoded_y = np.argmax(y)
#It will give label_encoded_y = 1
#one more example
one_hot_y = [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0]]
label_encoded_y = np.argmax(one_hot_y,axis=-1)
#it gives label_encoded_y as array([2, 4, 5])
推荐阅读
- git - 将 repo 从命令行推送到远程
- nginx - 自定义fastcgi缓存的Nginx缓存用户权限
- angular - Angular Material 12 自定义主题
- python - 这是根据比率将列表拆分为 3 部分的正确方法吗?
- vue.js - 如何禁用 vuejs v-table 列的排序功能?
- python - numpys 花式索引模式
- python - 我在为 Discord 编写机器人时遇到 @client.event 错误
- reactjs - axios.all/Axios.spread : 在我将响应设置为状态后,应用程序无法读取它
- php - 检查默认路径中的 grpc 和 protobuf 文件...未找到配置:错误:请重新安装 grpc 发行版
- php - laravel 返回下载会创建额外的文件