We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我是想修改成异常检测,虽然有6种不同的产品,但只分了OK、和Anomaly两类。 我自己写了个dataloader,使每个batch里只有单一产品的两类样本且平均分布OK和Anomaly。OK标签为1,Anomaly标签为0。 修改了loss如下,但是训练时pos_pair_很快就变成0。是哪里改的不对吗? 再请教下,用XBM的那个库会不会更适合我的这个情况呢? 多谢!!!
@LOSS.register('ms_loss') class MultiSimilarityLoss(nn.Module): def __init__(self, cfg): super(MultiSimilarityLoss, self).__init__() self.thresh = 0.5 self.margin = 0.1 self.scale_pos = cfg.LOSSES.MULTI_SIMILARITY_LOSS.SCALE_POS self.scale_neg = cfg.LOSSES.MULTI_SIMILARITY_LOSS.SCALE_NEG def forward(self, feats, labels): assert feats.size(0) == labels.size(0), \ f"feats.size(0): {feats.size(0)} is not equal to labels.size(0): {labels.size(0)}" batch_size = feats.size(0) sim_mat = torch.matmul(feats, torch.t(feats)) epsilon = 1e-5 loss = list() for i in range(batch_size): pos_pair_ = sim_mat[i][labels == 1] # 此处修改 pos_pair_ = pos_pair_[pos_pair_ < 1 - epsilon] neg_pair_ = sim_mat[i][labels == 0] # 此处修改 neg_pair = neg_pair_[neg_pair_ + self.margin > min(pos_pair_)] pos_pair = pos_pair_[pos_pair_ - self.margin < max(neg_pair_)] if len(neg_pair) < 1 or len(pos_pair) < 1: continue # weighting step pos_loss = 1.0 / self.scale_pos * torch.log( 1 + torch.sum(torch.exp(-self.scale_pos * (pos_pair - self.thresh)))) neg_loss = 1.0 / self.scale_neg * torch.log( 1 + torch.sum(torch.exp(self.scale_neg * (neg_pair - self.thresh)))) loss.append(pos_loss + neg_loss) if len(loss) == 0: return torch.zeros([], requires_grad=True) loss = sum(loss) / batch_size return loss
The text was updated successfully, but these errors were encountered:
No branches or pull requests
我是想修改成异常检测,虽然有6种不同的产品,但只分了OK、和Anomaly两类。
我自己写了个dataloader,使每个batch里只有单一产品的两类样本且平均分布OK和Anomaly。OK标签为1,Anomaly标签为0。
修改了loss如下,但是训练时pos_pair_很快就变成0。是哪里改的不对吗?
再请教下,用XBM的那个库会不会更适合我的这个情况呢?
多谢!!!
The text was updated successfully, but these errors were encountered: