import torch.nn as nn import torch.nn.functional as F class Encoder(nn.Module): """# Encoder Neural Network X_dim: Input dimension shape N: Inner neuronal layer size z_dim: Output dimension shape """ def __init__(self, X_dim, N, z_dim, dropout=0.0, negative_slope=0.3): super(Encoder, self).__init__() self.lin1 = nn.Linear(X_dim, N) self.lin2 = nn.Linear(N, N) self.lin3gauss = nn.Linear(N, z_dim) self.p = dropout self.negative_slope = negative_slope def forward(self, x): x = self.lin1(x) if self.p > 0.0: x = F.dropout(x, p=self.p, training=self.training) x = F.leaky_relu(x, negative_slope=self.negative_slope) x = self.lin2(x) if self.p > 0.0: x = F.dropout(x, p=self.p, training=self.training) x = F.leaky_relu(x, negative_slope=self.negative_slope) xgauss = self.lin3gauss(x) return xgauss