Skip to main content

什么是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))
#输出结果点击链接

Comments

Popular posts from this blog

Session Run的用法

feed_dict参数的作用是替换图中的某个tensor的值。例如: a = tf.add(2, 5)                        #a=7 b = tf.multiply(a, 3)                 #b=3*7=21 with tf.Session() as sess:     print(sess.run(b))     replace_dict = {a:15}           #用15代替b算式中的a     print(sess.run(b, feed_dict = replace_dict)) --------------------- 输出如下: 21 45

tf.split用法

按照行或者列分割一个矩阵 第一个参数是待切分的张量,第二个是切分的大小,共切分为三个,每一个分别为4列,15列,11列。第三个参数为1表示按照列切分,为0表示按照行切分。 切分的子块的大小加起来应该等于母块的大小。比如这个例子,4+15+11=30列 看下面的代码例子