CNN卷积和反卷积输出的计算方法
2026/7/10 6:17:05 网站建设 项目流程

卷积:

# 输入通道1,输出通道2,卷积核3x3,步长2,填充1 conv_layer = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=3, stride=2, padding=1) # 前向传播 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_channels=2, out_channels=1, kernel_size=3, stride=2, padding=1, output_padding=0) # 前向传播 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, :, :]}")

完整demo:

import 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_size=3, stride=2, padding=1) x_conv = conv(x) print(f"卷积后: {x_conv.shape}\n{x_conv[0,0]}\n") # 3. 反卷积 (3x3 -> 5x5) deconv = nn.ConvTranspose2d(2, 1, kernel_size=3, stride=2, padding=1, output_padding=0) x_deconv = deconv(x_conv) print(f"反卷积后: {x_deconv.shape}\n{x_deconv[0,0]}")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询