def forward(self, x): mean = torch.mean(x, dim=0).pow(2) cov = Ops.cov(x) cov_loss = torch.mean( (Variable(torch.eye(cov.size()[0]).cuda()) - cov).pow(2)) return torch.mean(mean) + cov_loss
def forward(self, x): real, fake = x _, real_features = real _, fake_features = fake real_features = torch.cat(real_features, dim=1) fake_features = torch.cat(fake_features, dim=1) real_mean = torch.mean(real_features, dim=0) fake_mean = torch.mean(fake_features, dim=0) real_cov = Ops.cov(real_features) fake_cov = Ops.cov(fake_features) mean_loss = torch.sum((real_mean - fake_mean).pow(2)) cov_loss = torch.sum((real_cov - fake_cov).pow(2)) return mean_loss + cov_loss