Advertisement
MathQ_

Untitled

Mar 28th, 2021
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.02 KB | None | 0 0
  1. class AutoEncoder(nn.Module):  
  2.     def __init__(self):
  3.         super().__init__()
  4.  
  5.         # Encoder
  6.         self.encoder_layer1 = nn.Sequential(
  7.             nn.Conv2d(1, 8, kernel_size=5, padding=4),
  8.             nn.ReLU(),
  9.             nn.MaxPool2d(2, 2, return_indices=True)
  10.         )
  11.  
  12.         self.encoder_layer2 = nn.Sequential(
  13.             nn.Conv2d(8, 16, kernel_size=4, padding=3),
  14.             nn.ReLU(),
  15.             nn.MaxPool2d(2, 2, return_indices=True)
  16.         )
  17.         self.encoder_layer3 = nn.Sequential(
  18.             nn.Conv2d(16, 32, kernel_size=4, padding=3),
  19.             nn.ReLU(),
  20.             nn.MaxPool2d(2, 2, return_indices=True)
  21.         )
  22.         self.encoder_layer4 = nn.Sequential(
  23.             nn.Conv2d(32, 64, kernel_size=3, padding=2),
  24.             nn.ReLU(),
  25.             nn.MaxPool2d(2, 2, return_indices=True)
  26.         )
  27.         self.encoder_layer5 = nn.Sequential(
  28.             nn.Conv2d(64, 128, kernel_size=3, padding=2),
  29.             nn.ReLU(),
  30.         )
  31.  
  32.         # Decoder
  33.         self.decoder_layer1 = nn.Sequential(
  34.             nn.ConvTranspose2d(128, 64, kernel_size=3, padding=2),
  35.             nn.ReLU(),
  36.         )
  37.         self.decoder_layer2 = nn.Sequential(
  38.             nn.ConvTranspose2d(64, 32, kernel_size=3, padding=2),
  39.             nn.ReLU(),
  40.         )
  41.         self.decoder_layer3 = nn.Sequential(
  42.             nn.ConvTranspose2d(32, 16, kernel_size=4, padding=3),
  43.             nn.ReLU(),
  44.         )
  45.         self.decoder_layer4 = nn.Sequential(
  46.             nn.ConvTranspose2d(16, 8, kernel_size=4, padding=3),
  47.             nn.ReLU(),
  48.         )
  49.         self.decoder_layer5 = nn.Sequential(
  50.             nn.ConvTranspose2d(8, 1, kernel_size=5, padding=4),
  51.             nn.ReLU()
  52.         )
  53.  
  54.         # UnPool
  55.         self.unpool = nn.MaxUnpool2d(2, 2)
  56.         self.all_indices = []
  57.         self.all_outputs = []
  58.            
  59.     def encoder(self, X):
  60.         self.all_outputs.append(X.shape)
  61.  
  62.         X, indices = self.encoder_layer1(X)
  63.         self.all_indices.append(indices)
  64.         self.all_outputs.append(X.shape)
  65.  
  66.         X, indices = self.encoder_layer2(X)
  67.         self.all_indices.append(indices)
  68.         self.all_outputs.append(X.shape)
  69.  
  70.         X, indices = self.encoder_layer3(X)
  71.         self.all_indices.append(indices)
  72.         self.all_outputs.append(X.shape)
  73.  
  74.         X, indices = self.encoder_layer4(X)
  75.         self.all_indices.append(indices)
  76.  
  77.         X = self.encoder_layer5(X)
  78.  
  79.         return X
  80.  
  81.     def decoder(self, X):
  82.         X = self.decoder_layer1(X)
  83.  
  84.         X = self.decoder_layer2(X)
  85.         X = self.unpool(X, self.all_indices[-1], output_size=self.all_outputs[-1])
  86.  
  87.         X = self.decoder_layer3(X)
  88.         X = self.unpool(X, self.all_indices[-2], output_size=self.all_outputs[-2])
  89.  
  90.         X = self.decoder_layer4(X)
  91.         X = self.unpool(X, self.all_indices[-3], output_size=self.all_outputs[-3])
  92.  
  93.         X = self.decoder_layer5(X)
  94.         X = self.unpool(X, self.all_indices[-4], output_size=self.all_outputs[-4])
  95.  
  96.         return X
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement