Несоответствие вызвано различными формами вывода слоя ConvTranspose2d
. Вы можете добавить output_padding
из 1 к первому и третьему слою транспонирования свертки, чтобы решить эту проблему.
т.е. nn.ConvTranspose2d(in_channels=1024,out_channels=512,kernel_size=5,stride=2, output_padding=1)
и nn.ConvTranspose2d(in_channels=256,out_channels=128,kernel_size=5,stride=2, output_padding=1)
Согласно документации :
Когда шаг> 1, Conv2d
отображает несколько входных фигур в одну и ту же выходную форму. output_padding
предоставляется для устранения этой неоднозначности путем эффективного увеличения расчетной выходной формы на одной стороне.
Формы слоев декодера перед добавлением output_padding
:
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
ConvTranspose2d-1 [-1, 512, 123, 155] 13,107,712
ReLU-2 [-1, 512, 123, 155] 0
ConvTranspose2d-3 [-1, 256, 249, 313] 3,277,056
ReLU-4 [-1, 256, 249, 313] 0
ConvTranspose2d-5 [-1, 128, 501, 629] 819,328
ReLU-6 [-1, 128, 501, 629] 0
ConvTranspose2d-7 [-1, 64, 503, 631] 73,792
ReLU-8 [-1, 64, 503, 631] 0
ConvTranspose2d-9 [-1, 32, 505, 633] 18,464
ReLU-10 [-1, 32, 505, 633] 0
ConvTranspose2d-11 [-1, 3, 507, 635] 867
ReLU-12 [-1, 3, 507, 635] 0
После добавления отступов:
================================================================
ConvTranspose2d-1 [-1, 512, 124, 156] 13,107,712
ReLU-2 [-1, 512, 124, 156] 0
ConvTranspose2d-3 [-1, 256, 251, 315] 3,277,056
ReLU-4 [-1, 256, 251, 315] 0
ConvTranspose2d-5 [-1, 128, 506, 634] 819,328
ReLU-6 [-1, 128, 506, 634] 0
ConvTranspose2d-7 [-1, 64, 508, 636] 73,792
ReLU-8 [-1, 64, 508, 636] 0
ConvTranspose2d-9 [-1, 32, 510, 638] 18,464
ReLU-10 [-1, 32, 510, 638] 0
ConvTranspose2d-11 [-1, 3, 512, 640] 867
ReLU-12 [-1, 3, 512, 640] 0