one_hot

paddle.fluid.layers. one_hot ( input, depth, allow_out_of_range=False ) [源代码]

注意:此OP要求输入Tensor shape的最后一维必须为1。此OP将在未来的版本中被移除!推荐使用fluid. cn_api_fluid_one_hot 。

该OP将输入(input)中的每个id转换为一个one-hot向量,其长度为 depth ,该id对应的向量维度上的值为1,其余维度的值为0。

输出的Tensor(或LoDTensor)的shape是将输入shape的最后一维替换为depth的维度。

  • 示例1(allow_out_of_range=False):
  1. 输入:
  2. X.shape = [4, 1]
  3. X.data = [[1], [1], [3], [0]]
  4. depth = 4
  5. 输出:
  6. Out.shape = [4, 4]
  7. Out.data = [[0., 1., 0., 0.],
  8. [0., 1., 0., 0.],
  9. [0., 0., 0., 1.],
  10. [1., 0., 0., 0.]]
  • 示例2 (allow_out_of_range=True):
  1. 输入:
  2. X.shape = [4, 1]
  3. X.data = [[1], [1], [5], [0]]
  4. depth = 4
  5. allow_out_of_range=True
  6. 输出:
  7. Out.shape = [4, 4]
  8. Out.data = [[0., 1., 0., 0.],
  9. [0., 1., 0., 0.],
  10. [0., 0., 0., 0.], ## 这一维的值是5,超过了depth,因此填成0
  11. [1., 0., 0., 0.]]
  • 示例3 (allow_out_of_range=False):
  1. 输入:
  2. X.shape = [4, 1]
  3. X.data = [[1], [1], [5], [0]]
  4. depth = 4
  5. allow_out_of_range=False
  6. 输出:抛出 Illegal value 的异常
  7. X中第2维的值是5,超过了depth,而allow_out_of_range=False表示不允许超过,因此抛异常。

参数:

  • input (Variable) - 维度为

    one_hot - 图1

    的多维Tensor或LoDTensor,维度至少两维,且最后一维必须是1。数据类型为int32或int64。

  • depth (int) - 用于定义一个one-hot向量的长度。若输入为词id,则 depth 通常取值为词典大小。

  • allow_out_of_range (bool) - 指明input中所包含的id值是否可以大于depth值。当超过depth时,如果 allow_out_of_range 为False,则会抛出 Illegal value 的异常;如果设置为True,该id对应的向量为0向量。默认值为False。

返回:转换后的one_hot Tensor或LoDTensor,数据类型为float32。

返回类型:Variable

代码示例

  1. import paddle.fluid as fluid
  2. # 该代码对应上述第一个示例,其中输入label的shape是[4, 1],输出one_hot_label的shape是[4, 4]
  3. label = fluid.layers.data(name="label", shape=[4, 1], append_batch_size=False, dtype="int64")
  4. one_hot_label = fluid.layers.one_hot(input=label, depth=4)