TensorFlow学习笔记--onehot编码

onehot:顾名思义--独热

适用:因为有些数据集并非连续性的,例如常见的多分类,适用于离散型的数据集

离散型的数据集:二分类,多分类等等

连续型的数据集:语言识别,文本等等

对比普通label,和做了onehot编码的label

这里假设为四分类batch_size为4

普通标签

label = [0,1,2,3]

onehot编码标签

label = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]

代码

tf.one_hot(
    indices,#输入,这里是一维的
    depth,# one hot dimension.
    on_value=None,#output 默认1
    off_value=None,#output 默认0
    axis=None,#默认为1
    dtype=None,
    name=None
)

labels = [0,1,2,3]

labels_ = tf.one_hot(labels,4,on_value=1,axis=1)

labels_---> [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]

计算loss

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits_scaled, labels=labels)
loss = tf.reduce_mean(cross_entropy, name='loss')

这里发两个损失函数的对比:

两个函数虽然功能类似,但是其参数labels有明显区别。tf.nn.softmax_cross_entropy_with_logits()中的logits和labels的shape都是[batch_size, num_classes],而tf.nn.sparse_softmax_cross_entropy_with_logits()中的labels是稀疏表示的,是 [0,num_classes)中的一个数值,代表正确分类结果。即sparse_softmax_cross_entropy_with_logits 直接用标签计算交叉熵,而 softmax_cross_entropy_with_logits 是标签的onehot向量参与计算。softmax_cross_entropy_with_logits 的 labels 是 sparse_softmax_cross_entropy_with_logits 的 labels 的一个独热版本(one hot version)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值