one-hot编码小总结(tensorflow应用)

onehot编码

本质上来讲是一个分类数据处理的方法,将每一个选项对应一串二进制编码。如下图所示:

在这里插入图片描述

而我们以手写训练集为例,手写训练集的总类别一共有十种,即输出节点为10,那么对于其中一个样本用布尔值0表示其不存在,用布尔值1表示其存在,这样对于1我们可以用一串二进制数据来表示:1000000000,同理二也可以用类似的形式表示:010000000。而对于tensorflow来说有一个封装好的方法可以直接实现one-hot编码:

y=tf.constant([1,2,3,4,5,6,7,8,9,0])       #数字编码的10个标签
y=tf.one_hot(y,depth=12)                   #one-hot编码,depth指的是one_hot编码的长度

输出结果:

tf.Tensor(
[[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]], shape=(10, 12), dtype=float32)

将depth=8:

y=tf.one_hot(y,depth=8) 

输出结果:

tf.Tensor(
[[0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 0.]], shape=(10, 8), dtype=float32)
这里可以明显的看出如果depth小于图片的类数会明显的出现编码重复的问题(8的编码和9的编码重合),所以一般情况下depth一般设置为要分类的个数。
若不加depth参数:会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值