如何使用pytorch将多标签分类上下文下的标签列表覆盖到一个热编码中?

如何使用pytorch将多标签分类上下文下的标签列表覆盖到一个热编码中?,pytorch,one-hot-encoding,multilabel-classification,Pytorch,One Hot Encoding,Multilabel Classification,我有一个列表,每个样本都有一个多标签的一批数据。那么如何在一个热编码中把它转换成火炬张量呢? 例如,当批处理大小为5和类数为6时 标签=[ [1,2,3], [4,6], [1], [1,4,5], [4] ] 如何在pytorch中将其变成一个热编码 label\u tensor=tensor([ [1,1,1,0,0,0], [0,0,0,1,0,1], [1,0,0,0,0,0], [1,0,0,1,1,0], [0,0,0,1,0,0] ]) 如果批次大小可以从len(标签)导出: d

我有一个列表,每个样本都有一个多标签的一批数据。那么如何在一个热编码中把它转换成火炬张量呢? 例如,当批处理大小为5和类数为6时

标签=[
[1,2,3],
[4,6],
[1],
[1,4,5],
[4]
]
如何在pytorch中将其变成一个热编码

label\u tensor=tensor([
[1,1,1,0,0,0],
[0,0,0,1,0,1],
[1,0,0,0,0,0],
[1,0,0,1,1,0],
[0,0,0,1,0,0]
])

如果批次大小可以从
len(标签)
导出:

def to_onehot(标签,n_类别,dtype=torch.float32):
批次大小=长度(标签)
一个热标签=火炬。零(大小=(批量大小,n个类别),数据类型=数据类型)
对于i,枚举中的标签(标签):
#从每个LongTensor中减去1,因为
#索引从1开始,张量索引从0开始
标签=火炬。传感器(标签)-1
一个热标签[i]=一个热标签[i]。散布(dim=0,索引=label,值=1。)
返回一个热标签
您有6个类别,希望输出是整数的张量:

to_onehot(标签,n_类别=6,dtype=torch.int64)
我会坚持使用torch.float32,以防以后需要使用标签平滑、混合或类似的方法

tensor([[1, 1, 1, 0, 0, 0],
        [0, 0, 0, 1, 0, 1],
        [1, 0, 0, 0, 0, 0],
        [1, 0, 0, 1, 1, 0],
        [0, 0, 0, 1, 0, 0]])