1. 实现代码
标签(label)的形状是:(batch_size, 1, H, W)
标签(label)one-hot的形状是:(batch_size, n_classes, H, W)
def make_one_hot(labels, classes):
one_hot = torch.FloatTensor(labels.size()[0], classes, labels.size()[2], labels.size()[3]).zero_().to(labels.device)
target = one_hot.scatter_(1, labels.data, 1)
return target
2. torch.tensor.scatter_()
官方手册讲的其实蛮好的
Tensor.scatter_(dim, index, src, reduce=None)
用src,根据index和dim,替换self中的数值
以三维tensor举例,替换关系可以表达成:
self[index[i][j][k]][j][k] = src[i][j][k] # if dim == 0
self[i][index[i][j][k]][k] = src[i][j][k] # if dim == 1
self[i][j][index[i][j][k]] = src[i][j][k] # if dim &