CNN卷积和反卷积输出的计算方法
卷积# 输入通道1输出通道2卷积核3x3步长2填充1 conv_layer nn.Conv2d(in_channels1, out_channels2, kernel_size3, stride2, padding1) # 前向传播 x_conv conv_layer(x) print(f卷积后形状: {x_conv.shape}) # torch.Size([1, 2, 3, 3]) # 验证输出尺寸: (5 - 3 2*1)/2 1 (4)/2 1 3 print(f卷积后的特征图 (第一个通道):\n{x_conv[0, 0, :, :]}\n)反卷积# 输入通道2对应卷积的输出输出通道1卷积核3x3步长2填充1 deconv_layer nn.ConvTranspose2d(in_channels2, out_channels1, kernel_size3, stride2, padding1, output_padding0) # 前向传播 x_deconv deconv_layer(x_conv) print(f反卷积后形状: {x_deconv.shape}) # torch.Size([1, 1, 5, 5]) # 验证输出尺寸: (3 - 1)*2 - 2*1 3 0 4 - 2 3 5 print(f反卷积恢复后的特征图:\n{x_deconv[0, 0, :, :]})完整demoimport torch import torch.nn as nn torch.manual_seed(42) # 1. 输入 x torch.randn(1, 1, 5, 5) print(f输入: {x.shape}\n{x[0,0]}\n) # 2. 卷积 (5x5 - 3x3) conv nn.Conv2d(1, 2, kernel_size3, stride2, padding1) x_conv conv(x) print(f卷积后: {x_conv.shape}\n{x_conv[0,0]}\n) # 3. 反卷积 (3x3 - 5x5) deconv nn.ConvTranspose2d(2, 1, kernel_size3, stride2, padding1, output_padding0) x_deconv deconv(x_conv) print(f反卷积后: {x_deconv.shape}\n{x_deconv[0,0]})