什么是onehot编码

这么高大上的名字,顾名思义,就是在编码中只有一个1,其他是0。
眼熟吧。在Pyton神经网络编程这本书中,已经见过了。神经网络的输出中,用1000000000代表1,用01000000000代表1,以此类推,用0000000001代表9。
tf.one_hot()函数是将input转化为one-hot类型数据输出,相当于将多个数值联合放在一起作为多个相同类型的向量,可用于表示各自的概率分布,通常用于分类任务中作为最后的FC层的输出,有时翻译成“独热”编码。
tensorflow的help中相关说明如下:
one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None)
indices表示输入的多个数值,通常是矩阵形式;depth表示输出的尺寸。
由于one-hot类型数据长度为depth位,其中只用一位数字表示原输入数据,这里的on_value就是这个数字,默认值为1,one-hot数据的其他位用off_value表示,默认值为0。
tf.one_hot()函数规定输入的元素indices从0开始,最大的元素值不能超过(depth - 1),因此能够表示(depth + 1)个单位的输入。若输入的元素值超出范围,输出的编码均为 [0, 0 … 0, 0]。
indices = 0 对应的输出是[1, 0 … 0, 0], indices = 1 对应的输出是[0, 1 … 0, 0], 依次类推,最大可能值的输出是[0, 0 … 0, 1]。
代码示例如下:

import tensorflow as tf
import numpy as np
t=[0,1,2,3,4]#onehot编码数据必须是整形
#indices, depth, on_value=None, off_value=None, axis=None, dtype=None
indices=t
depth=5#不能小于t的长度
sess=tf.Session()
on_value=1#默认是1,也可以设置为其他值,比如9
off_value=0#默认是0,也可以设置为其他数值,比如2
axis=0#默认是0,纵轴方向编码,0是纵轴,1是横轴,类似于相互转置
oh1=tf.one_hot(t,depth=depth,axis=axis)
oh2=tf.one_hot(t,depth=depth,axis=axis,on_value=9,off_value=2)
print(sess.run(oh1))
print(sess.run(oh2))

输出结果点击链接

猜你喜欢

转载自blog.csdn.net/qq_31150463/article/details/84194050