Hi. As a part of my research I need to use Concordance Correlation Coefficient (CCC) as loss function. Actually, I want to minimize 1-CCC or maximize CCC. I write the code as follow but when I train my network w.r.t this loss function there is not meaningful change on loss. Is there something wrong with my code?
tnx
class ConcordanceCorCoeff(nn.Module):
def __init__(self):
super(ConcordanceCorCoeff, self).__init__()
self.mean = torch.mean
self.var = torch.var
self.sum = torch.sum
self.sqrt = torch.sqrt
self.std = torch.std
def forward(self, prediction, ground_truth):
mean_gt = self.mean (ground_truth, 0)
mean_pred = self.mean (prediction, 0)
var_gt = self.var (ground_truth, 0)
var_pred = self.var (prediction, 0)
v_pred = prediction - mean_pred
v_gt = ground_truth - mean_gt
cor = self.sum (v_pred * v_gt) / (self.sqrt(self.sum(v_pred ** 2)) * self.sqrt(self.sum(v_gt ** 2)))
sd_gt = self.std(ground_truth)
sd_pred = self.std(prediction)
numerator=2*cor*sd_gt*sd_pred
denominator=var_gt+var_pred+(mean_gt-mean_pred)**2
ccc = numerator/denominator
return 1-ccc