class Autoencoder(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Linear(2, 3) self.decoder = nn.Linear(3, 2) def forward(self, x): x = self.encoder(x) x = nn.ReLU()(x) x = self.decoder(x) return x def fit(self, dl): loss = nn.MSELoss() opt = torch.optim.Adam(self.parameters()) KamikazeTrainer(Logger(), self, loss, opt).fit(dl, epochs=60) return self class AutoencoderNoBias(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Linear(2, 3, bias=False) self.decoder = nn.Linear(3, 2, bias=False) def forward(self, x): x = self.encoder(x) x = nn.ReLU()(x) x = self.decoder(x) return x def fit(self, dl): loss = nn.MSELoss() opt = torch.optim.Adam(self.parameters()) KamikazeTrainer(Logger(), self, loss, opt).fit(dl, epochs=60) return self class TanhAutoencoder(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Linear(2, 3) self.decoder = nn.Linear(3, 2) def forward(self, x): x = self.encoder(x) x = nn.Tanh()(x) x = self.decoder(x) return x def fit(self, dl): loss = nn.MSELoss() opt = torch.optim.Adam(self.parameters()) KamikazeTrainer(Logger(), self, loss, opt).fit(dl, epochs=60) return self class TanhAutoencoderNoBias(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Linear(2, 3, bias=False) self.decoder = nn.Linear(3, 2, bias=False) def forward(self, x): x = self.encoder(x) x = nn.Tanh()(x) x = self.decoder(x) return x def fit(self, dl): loss = nn.MSELoss() opt = torch.optim.Adam(self.parameters()) KamikazeTrainer(Logger(), self, loss, opt).fit(dl, epochs=60) return self class LinearAutoencoder(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Linear(2, 3) self.decoder = nn.Linear(3, 2) def forward(self, x): x = self.encoder(x) x = self.decoder(x) return x def fit(self, dl): loss = nn.MSELoss() opt = torch.optim.Adam(self.parameters()) KamikazeTrainer(Logger(), self, loss, opt).fit(dl, epochs=60) return self
|