mindspore.dataset.transforms.OneHot

class mindspore.dataset.transforms.OneHot(num_classes, smoothing_rate=0.0)[源代码]

对输入标签进行OneHot编码。

对于 shape 为 \((*)\) 的 1 维输入,将返回 shape 为 \((*, num\_classes)\) 的输出,其中输入值对应的索引位置处的元素值为 1 ,其余 位置值为 0 。若指定了标签平滑系数,还将进一步平滑各元素值,增强泛化能力。

参数:
  • num_classes (int) - 标签类别总数。需大于输入标签值的最大值。

  • smoothing_rate (float,可选) - 标签平滑系数。取值需在[0.0, 1.0]之间。默认值: 0.0 ,不进行标签平滑。

异常:
  • TypeError - 当 num_classes 不为int类型。

  • TypeError - 当 smoothing_rate 不为float类型。

  • ValueError - 当 smoothing_rate 的取值不在[0.0, 1.0]范围中。

  • RuntimeError - 输入标签不为int类型。

  • RuntimeError - 输入标签的维数不为1。

支持平台:

CPU

样例:

>>> import numpy as np
>>> import mindspore.dataset as ds
>>> import mindspore.dataset.transforms as transforms
>>>
>>> # Use the transform in dataset pipeline mode
>>> data = [1, 2, 3, 4, 5, 6, 7, 8]
>>> numpy_slices_dataset = ds.NumpySlicesDataset(data, ["label"])
>>>
>>> # Assume that dataset has 10 classes, thus the label ranges from 0 to 9
>>> onehot_op = transforms.OneHot(num_classes=10)
>>> numpy_slices_dataset = numpy_slices_dataset.map(operations=onehot_op, input_columns=["label"])
>>> for item in numpy_slices_dataset.create_dict_iterator(num_epochs=1, output_numpy=True):
...     print(item["label"].shape, item["label"].dtype)
...     break
(10,) int64
>>>
>>> # Use the transform in eager mode
>>> data = np.array([1, 2, 3])
>>> output = transforms.OneHot(num_classes=5, smoothing_rate=0)(data)
>>> print(output.shape, output.dtype)
(3, 5) int64