Hello All,
I am trying to train a Variational Auto Encoder along with supervised multilabel Classification.
As my Binary Cross-Entropy loss and Loss of a VAE both are performing well, I wonder where I am doing badly.
One More quick question, the latent representation vector is represented is Z or mean?
class GCNModelVAE(nn.Module):
def __init__(self, input_feat_dim, hidden_dim1, hidden_dim2,num_classes, dropout):
super(GCNModelVAE, self).__init__()
self.gc1 = GraphConvolution(input_feat_dim, hidden_dim1, dropout, act=F.relu)
self.gc2 = GraphConvolution(hidden_dim1, hidden_dim2, dropout, act=lambda x: x)
self.gc3 = GraphConvolution(hidden_dim1, hidden_dim2, dropout, act=lambda x: x)
self.dc = InnerProductDecoder(dropout, act=lambda x: x)
self.sigmoid = nn.Sigmoid()
self.classifier = Classifier(hidden_dim2,hidden_dim1,num_classes,p=dropout)
def encode(self, x, adj):
hidden1 = self.gc1(x, adj)
return self.gc2(hidden1, adj), self.gc3(hidden1, adj)
def reparameterize(self, mu, logvar):
if self.training:
std = torch.exp(logvar)
eps = torch.randn_like(std)
return eps.mul(std).add_(mu)
else:
return mu
def forward(self, x, adj):
mu, logvar = self.encode(x, adj)
z = self.reparameterize(mu, logvar)
return self.dc(z), mu, logvar, mu, mu
def loss_function(preds, labels, mu, logvar,pred_labels, true_labels, n_nodes, norm, pos_weight):
cost2 = norm * F.binary_cross_entropy_with_logits(pred_labels, true_labels)
cost1 = norm * F.binary_cross_entropy_with_logits(preds, labels, pos_weight=pos_weight)
# see Appendix B from VAE paper:
# Kingma and Welling. Auto-Encoding Variational Bayes. ICLR, 2014
# https://arxiv.org/abs/1312.6114
# 0.5 * sum(1 + log(sigma^2) - mu^2 - sigma^2)
KLD = -0.5 / n_nodes * torch.mean(torch.sum(1 + 2 * logvar - mu.pow(2) - logvar.exp().pow(2), 1))
return KLD+cost1+cost2
cost2 represents my loss for Supervision.
Lets suppose predicts_label=[-0.0013, -0.0006, -0.0017, 0.0011, -0.0030, 0.0052] and true_labels=[1 0 0 1 1 0]
Thanks again,I wish to see some nice clusters for the latent space representation.
I look forward to hearing from you soon.