سلام دوستان
من کد فاصله جاکارد بدست آوردم
def soft_jaccard(outputs, targets):
eps = 1e-15
jaccard_target = (targets == 1).float()
jaccard_output = F.sigmoid(outputs)
intersection = (jaccard_output * jaccard_target).sum()
union = jaccard_output.sum() + jaccard_target.sum()
return intersection / (union - intersection + eps)
class LossBinary:
"""
Loss defined as BCE - log(soft_jaccard)
Vladimir Iglovikov, Sergey Mushinskiy, Vladimir Osin,
Satellite Imagery Feature Detection using Deep Convolutional Neural Network: A Kaggle Competition
arXiv:1706.06169
"""
def __init__(self, jaccard_weight=0):
self.nll_loss = nn.BCEWithLogitsLoss()
self.jaccard_weight = jaccard_weight
def __call__(self, outputs, targets):
loss = (1 - self.jaccard_weight) * self.nll_loss(outputs, targets)
if self.jaccard_weight:
loss += self.jaccard_weight * (1 - soft_jaccard(outputs, targets))
return loss
اما با این فرمول 5 که مال خود نویسنده کد هست به نظر فرق می کنه. اون n چی هست؟ تعداد پیکس هاست؟ چرا تقسیم بر n شد؟
من واقعا نمی تونم فرمول متوجه بشم اگه کسی می نونه یک راهنمایی بکنه ثواب داره!!
مگه در جاکارد میزان مشابهت بررسی نمیشه؟ پس باید بالا سیگما باشه پایین هم سیگما باشه! یعنی از سیگما فاکتور گرفت!
y لیبل هست و اون یکی هم پیش بینی شبکه.