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 == 2
dim代表index要在哪个维度上替换self的索引。
3. 回到one-hot
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
假设我们的有八个类别,那么:
one_hot = torch.FloatTensor(labels.size()[0], classes, labels.size()[2], labels.size()[3]).zero_().to(labels.device)
生成了一个尺寸为(batch_size, 8, H, W)的tensor
target = one_hot.scatter_(1, labels.data, 1)
one_hot[i][labels.data][k][z] = 1
PS:不知道自己有没有讲明白,如果没看懂欢迎反馈。
这篇博客介绍了如何在PyTorch中使用torch.tensor.scatter_()函数将标签转换为one-hot编码,详细阐述了该函数的工作原理,并通过示例说明了在深度学习中进行one-hot编码的过程。
5219

被折叠的 条评论
为什么被折叠?



