如何将pytorch中的标签转换为onehot

如何将pytorch中的标签转换为onehot,pytorch,torch,mnist,one-hot-encoding,torchvision,Pytorch,Torch,Mnist,One Hot Encoding,Torchvision,如何为target\u transform提供将标签更改为onehot编码的函数 例如,torchvision中的MNIST数据集: train_dataset = torchvision.datasets.MNIST(root='./mnist_data/', train=True, download=True,

如何为
target\u transform
提供将标签更改为onehot编码的函数

例如,torchvision中的MNIST数据集:

train_dataset = torchvision.datasets.MNIST(root='./mnist_data/', 
                                           train=True,
                                           download=True,
                                           transform=train_transform,
                                           target_transform=<????>)
train_dataset=torchvision.datasets.MNIST(root='./MNIST_data/”,
火车=真的,
下载=真,
transform=训练_transform,
目标_变换=)

尝试了
F.onehot()
,但没有成功。

我就是这样实现的。不确定是否有更干净的方法

train_dataset=torchvision.datasets.MNIST(root='./data/',train=True,
transform=torchvision.transforms.ToTensor(),
target_transform=torchvision.transforms.Compose([
lambda x:torch.LongTensor([x]),#或者仅仅是torch.tensor
lambda x:F.one_hot(x,10)]),
下载=真)
  • 它需要是一个
    索引张量
    ?i、 e.int64

  • 无法使用torchvision.ToSensor,因为它不是图像

  • 此外,
    torch.LongTensor
    torch.tensor
    int
    输入时表现不同

  • 需要提供课程数量


使用lambda用户定义函数将整数转换为一个热编码张量

train_dataset=torchvision.datasets.MNIST(root='./MNIST_data/',train=True,
下载=True,转换=train\u转换,
目标_变换=Lambda(Lambda y:torch.zero(10,dtype=torch.float).scatter_0,torch.tensor(y,value=1))
  • 它首先创建一个大小为10的零张量(数据集中标签的数量) 并调用scatter_u,它在标签y给出的索引上指定一个值=1
F.onehot()有什么问题吗?对我来说,作为
torch.nn.functional.one\u hot(torch.tensor(2,5))。type(torch.cuda.FloatTensor)