Ich versuche, TextGAN mit Pytorch "replizieren" und ich bin neu in Pytorch. Mein aktuelles Anliegen ist es, die L_G (eq 7 Seite 3.), Und hier ist mein aktueller Code zu replizieren:Wie implementiert man eine Obergrenze JSD Verlust in Pytorch?
class JSDLoss(nn.Module):
def __init__(self):
super(JSDLoss,self).__init__()
def forward(self, batch_size, f_real, f_synt):
assert f_real.size()[1] == f_synt.size()[1]
f_num_features = f_real.size()[1]
identity = autograd.Variable(torch.eye(f_num_features)*0.1, requires_grad=False)
if use_cuda:
identity = identity.cuda(gpu)
f_real_mean = torch.mean(f_real, 0, keepdim=True)
f_synt_mean = torch.mean(f_synt, 0, keepdim=True)
dev_f_real = f_real - f_real_mean.expand(batch_size,f_num_features)
dev_f_synt = f_synt - f_synt_mean.expand(batch_size,f_num_features)
f_real_xx = torch.mm(torch.t(dev_f_real), dev_f_real)
f_synt_xx = torch.mm(torch.t(dev_f_synt), dev_f_synt)
cov_mat_f_real = (f_real_xx/batch_size) - torch.mm(f_real_mean, torch.t(f_real_mean)) + identity
cov_mat_f_synt = (f_synt_xx/batch_size) - torch.mm(f_synt_mean, torch.t(f_synt_mean)) + identity
cov_mat_f_real_inv = torch.inverse(cov_mat_f_real)
cov_mat_f_synt_inv = torch.inverse(cov_mat_f_synt)
temp1 = torch.trace(torch.add(torch.mm(cov_mat_f_synt_inv, cov_mat_f_real), torch.mm(cov_mat_f_real_inv, cov_mat_f_synt)))
temp1 = temp1.view(1,1)
temp2 = torch.mm(torch.mm((f_synt_mean - f_real_mean), (cov_mat_f_synt_inv + cov_mat_f_real_inv)), torch.t(f_synt_mean - f_real_mean))
loss_g = torch.add(temp1, temp2).mean()
return loss_g
Es funktioniert. Ich habe jedoch den Verdacht, dass es nicht die Möglichkeit ist, einen benutzerdefinierten Verlust zu erstellen. Jede Art von Hilfe wird sehr geschätzt! Vielen Dank im Voraus :)
vielen Dank für den Kommentar @ JMA. Ich wusste schon ziemlich genau, wie man Verlustfunktionen macht und alles, meine Frage konzentrierte sich eher darauf, ob ich die richtige Gleichung oder die Gleichung des Papiers benutze oder nicht. Es würde die ganze Welt bedeuten, wenn Sie mir dabei helfen können :) –
Brauchen Sie noch Hilfe, die das bestätigt? – JMA
Ja, ich bin auch in Ordnung, wenn Sie die Diskussion auf E-Mail verschieben möchten –