Python 标签不平衡的多标签分类
我正在建立多标签分类网络。 我的GT是长度Python 标签不平衡的多标签分类,python,tensorflow,neural-network,pytorch,multilabel-classification,Python,Tensorflow,Neural Network,Pytorch,Multilabel Classification,我正在建立多标签分类网络。 我的GT是长度512[0,0,0,1,0,1,0,…,0,0,0,1] 大多数情况下,它们是零,每个向量大约有5个1,其余为零 我想做: 使用sigmoid激活输出层 对损失函数使用二进制交叉熵 但我怎样才能解决不平衡的问题呢? 网络可以学习预测始终为零,并且仍然具有很低的学习损失分数 我如何才能让它真正学会预测……你不能轻易地增加样本,因为这是一个多标签的案例(我从帖子中错过了这一点) 你能做的就是给1更高的权重,比如: import torch class B
512
[0,0,0,1,0,1,0,…,0,0,0,1]
大多数情况下,它们是零
,每个向量大约有5个1
,其余为零
我想做:
使用sigmoid
激活输出层
对损失函数使用二进制交叉熵
但我怎样才能解决不平衡的问题呢?
网络可以学习预测始终为零
,并且仍然具有很低的学习损失分数
我如何才能让它真正学会预测……你不能轻易地增加样本,因为这是一个多标签的案例(我从帖子中错过了这一点) 你能做的就是给
1
更高的权重,比如:
import torch
class BCEWithLogitsLossWeighted(torch.nn.Module):
def __init__(self, weight, *args, **kwargs):
super().__init__()
# Notice none reduction
self.bce = torch.nn.BCEWithLogitsLoss(*args, **kwargs, reduction="none")
self.weight = weight
def forward(self, logits, labels):
loss = self.bce(logits, labels)
binary_labels = labels.bool()
loss[binary_labels] *= labels[binary_labels] * self.weight
# Or any other reduction
return torch.mean(loss)
loss = BCEWithLogitsLossWeighted(50)
logits = torch.randn(64, 512)
labels = torch.randint(0, 2, size=(64, 512)).float()
print(loss(logits, labels))
您还可以使用来关注积极的示例(在某些库中应该有一些可用的实现)
编辑:
焦点损失也可以按照这些线编码(功能形式,因为这是我在回购协议中所做的,但你应该能够从中工作):
你不能轻易地增加样本,因为这是一个多标签的案例(我在文章中错过了这一点) 你能做的就是给
1
更高的权重,比如:
import torch
class BCEWithLogitsLossWeighted(torch.nn.Module):
def __init__(self, weight, *args, **kwargs):
super().__init__()
# Notice none reduction
self.bce = torch.nn.BCEWithLogitsLoss(*args, **kwargs, reduction="none")
self.weight = weight
def forward(self, logits, labels):
loss = self.bce(logits, labels)
binary_labels = labels.bool()
loss[binary_labels] *= labels[binary_labels] * self.weight
# Or any other reduction
return torch.mean(loss)
loss = BCEWithLogitsLossWeighted(50)
logits = torch.randn(64, 512)
labels = torch.randint(0, 2, size=(64, 512)).float()
print(loss(logits, labels))
您还可以使用来关注积极的示例(在某些库中应该有一些可用的实现)
编辑:
焦点损失也可以按照这些线编码(功能形式,因为这是我在回购协议中所做的,但你应该能够从中工作):
@伊万,这是一个完全不同的问题。@伊万,这是一个完全不同的问题。