Устранение несоответствия размеров при разработке автоэнкодера - PullRequest
0 голосов
/ 30 мая 2020

У меня следующая архитектура 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)

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...