CNN卷积和反卷积输出的计算方法

卷积:

复制代码
# 输入通道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]}")
相关推荐
田里的水稻2 小时前
FA_CNN卷积神经网络三---非线性激活函数PyTorch
人工智能·pytorch·神经网络·机器学习·cnn
老鱼说AI3 小时前
脉冲神经网络:神经网络发展历史背景
人工智能·深度学习·神经网络·机器学习·自然语言处理·学习方法
frankzch3 小时前
Claude 刷新量子电路最优:LLM 与评估器的进化循环怎么搭
人工智能·深度学习·机器学习·语言模型·量子计算
拜小白4 小时前
【论文解读】PanoSwin:为全景理解打造的“全景版“ Swin Transformer
深度学习·计算机视觉·全景图
打工仔折腾 AI4 小时前
从零开始大模型微调:基于 PyTorch 与 ChatGLM 的 LoRA 实践指南
人工智能·pytorch·后端·python·深度学习·性能优化·ai agent 实战
高洁015 小时前
具身智能感知系统底层原理
人工智能·python·深度学习·机器学习·transformer
小星星_ios6 小时前
从 3Blue1Brown 到 NumPy:手写一个神经网络训练 MNIST
人工智能·python·神经网络
在所不辞兄6 小时前
为什么残差连接能够缓解深层神经网络的退化问题,而不仅仅是改善梯度传播?
人工智能·深度学习·神经网络·机器学习
点PY7 小时前
OmDet-Turbo: Real-Time Transformer-Based Open-Vocabulary Object Detection论文精读
深度学习·目标检测·transformer
Tiandaren8 小时前
么是agent、为什么要做agent、怎么做agent、怎么工程化
人工智能·python·深度学习·大模型