one_hot

paddle.nn.functional. one_hot ( x, num_classes, name=None ) [源代码]

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

输出的Tensor的shape是在输入shape的最后一维后面添加了num_classes的维度。

  • 示例1:
  1. 输入:
  2. X.shape = [4]
  3. X.data = [1, 1, 3, 0]
  4. num_classes = 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:
  1. 输入:
  2. X.shape = [4]
  3. X.data = [1, 1, 5, 0]
  4. num_classes = 4
  5. 输出:抛出 Illegal value 的异常
  6. X中第2维的值是5,超过了num_classes,因此抛异常。

参数:

  • x (Tensor) - 维度为

    one_hot - 图1

    的多维Tensor,维度至少1维。数据类型为int32或int64。

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

  • name (str,可选) – 具体用法请参见 Name ,一般无需设置,默认值为None。

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

代码示例

  1. import paddle
  2. label = paddle.to_tensor([1, 1, 3, 0], dtype='int64')
  3. # label.shape = [4]
  4. one_hot_label = paddle.nn.functional.one_hot(label, num_classes=4)
  5. # one_hot_label.shape = [4, 4]
  6. # one_hot_label = [[0., 1., 0., 0.],
  7. # [0., 1., 0., 0.],
  8. # [0., 0., 0., 1.],
  9. # [1., 0., 0., 0.]]