Mon Dec 22 2025 00:00:00 GMT+0800 (中國標準時間)
卷积相关代码
说来弄了这么久,到底ResNet到底是什么样的网络结构都没看过,所以去看看相关的东西,然后就有搜到了CNN的卷积,于是也看看。
填充一些文字,以便于网页能够正常显示。
二维互相关(交叉关联)的相关代码:
1 | import torch |
实现二维卷积层:
1 | class Conv2D(nn.Module): |
使用库函数:
1 | conv2d = nn.Conv2d(1,1,kernel_size=3,padding=1) |
kernel_size传单个数值时,PyTorch 会自动将其转为正方形卷积核(n×n)- 不仅是
kernel_size,padding、stride、dilation等参数都遵循同样的规则 - 若需要非正方形卷积核,需传入元组形式(如
(3,5))明确指定高度和宽度
池化层:增加平移不变性的冗余,避免很尖锐的单像素巨大差异。
1 | pool2d =. nn.MaxPool2d(input=...,padding=1,stride=2) |
批归一化层:增加noise,加速收敛。
1 | def batch_norm(X,gamma,beta,moving_mean,moving_var,eps,momentum): |
为什么这里要用.data?
moving_mean和moving_var是全局滑动平均变量,不属于模型可训练参数(不需要计算梯度),只是用来保存训练过程中累计的均值 / 方差,供推理时使用。- 如果直接返回
moving_mean和moving_var,它们会携带梯度计算的信息(即使不需要),可能导致梯度图冗余,甚至意外参与梯度计算;而.data可以剥离这些梯度信息,只返回纯数值。
1 | class BatchNorm(nn.Module): |