tf.one_hot()

最近在做吴恩达老师提供的深度学习的代码,其中遇到了这个函数tf.one_hot(),所以在tensorflow的官网找到了关于这个函数的介绍,下面是对其说明的大致翻译:

函数的原型:tf.onehot(indices,depth,on_value=None,off_value=None,axis=None,dtype=None,name=None)

函数返回的是一个one-hot的张量。这个张量中由indices指示的下标的元素是on_value,如果不指示的地方全部是off_value.

其中on_value和off_value必须是相同的类型,如果参数中的dtype参数给我们了,那么我们的on_value和off_value的类型必须与这个dtype一致。如果没有提供这个参数,那么默认的dtype为tf.float32.

如果参数中没有提供on_value,那么默认是1,如果off_value没有被提供,那么默认是0.

如果输入参数indices的秩为N,那么输出的结果的rank是N+1,多的那个维度创建在axis指示的维度上,如果axis没有指示,那么默认这个新的维度添加在最后。

如果传入的indices是一个数字,那么这个输出张量的大小是一个长度为参数depth的向量。

如果传入的indices是一个长度为features的向量,那么输出的大小是:如果axis=-1,那么大小是features×depth,如果axis=0,那么大小是depth*features.

如果传入的indices是一个矩阵或者batch(可以理解成深度学习里面经常说的一批数据,那么这个batch_size就是第一维度,features就是第二维度)大小为[batch,features],则输出的shape为:axis=-1,大小为batch*features*depth,如果axis=1,大小为batch*depth*features.如果axis=0,那么大小为depth*batch*features。

下面是一些提供的案例:

import numpy as np
import tensorflow as tf

#第一个案例:最简单的普通形式
indices=[0,1,2]   #rank=1
depth=3
a=tf.one_hot(indices,depth)   #rank=2,输出为[3,3]

#设置了on_value和off_value的大小,注意观察结果,
# 你会发现indices中数字指示的地方用on_value代替,
# 其他地方用的是off_value
indices=[0,2,-1,1]  #rank=1
depth=3
b=tf.one_hot(indices,depth,on_value=5.0,off_value=1.0,axis=-1)
#rank=2,输出的shape为[4,3]

#第三个案例是一个矩阵,rank=2,那么输出的rank=3,depth=3,axis=-1,
#输出的shape为[2,2,3]
indices=[[0,2],[-1,1]]
depth=3
c=tf.one_hot(indices,depth,on_value=1,axis=-1)

with tf.Session() as sess:
    print(sess.run(a))
    print("...............")
    print(sess.run(b))
    print("---------------")
    print(sess.run(c))

结果:

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
...............
[[5. 1. 1.]
 [1. 1. 5.]
 [1. 1. 1.]
 [1. 5. 1.]]
---------------
[[[1 0 0]
  [0 0 1]]

 [[0 0 0]
  [0 1 0]]]

猜你喜欢

转载自blog.csdn.net/m0_37393514/article/details/81393406