torch.tensor.scatter_()标签转one-hot

这篇博客介绍了如何在PyTorch中使用torch.tensor.scatter_()函数将标签转换为one-hot编码,详细阐述了该函数的工作原理,并通过示例说明了在深度学习中进行one-hot编码的过程。

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:不知道自己有没有讲明白,如果没看懂欢迎反馈。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值