У меня следующая архитектура Auto Encoder (Pytorch):
channels = 12
# encoder
self.conv0 = nn.Conv2d(1, channels, kernel_size=3, stride=1)
self.mp0 = nn.MaxPool2d((2, 2), stride=2, return_indices=True)
self.conv1 = nn.Conv2d(channels, channels * 2, padding=1, kernel_size=3, stride=1)
self.mp1 = nn.MaxPool2d((3, 3), stride=2, return_indices=True)
self.conv2 = nn.Conv2d(channels * 2, channels * 2, kernel_size=3, stride=1)
# decoder
self.convtransp0 = nn.ConvTranspose2d(channels * 2, channels * 2, kernel_size=3, stride=1)
self.mup0 = nn.MaxUnpool2d((2, 2), stride=2)
self.convtransp1 = nn.ConvTranspose2d(channels * 2, channels, kernel_size=3, stride=1)
self.mup1 = nn.MaxUnpool2d((2, 2), stride=2)
self.convtransp2 = nn.ConvTranspose2d(channels, 1, kernel_size=3, stride=1)
Я намерен сделать его симметричным c. Мои изображения имеют размер 512x512. Когда я пытаюсь запустить его, я получаю исключение из-за несовпадения размеров между convtransp1 и mup1: torch.Size ([5, 12, 256, 256]) и torch.Size ([5, 12, 255, 255]) соответственно. Мой вопрос касается общего отношения к решению такого несоответствия?
в настоящее время я использую самый простой подход:
def forward(self, x):
...
y = self.convtransp1(y)
y = y[:, :, :255, :255]
y = F.relu(y)
y = self.mup1(y, ixs0)
...