还是这张老图:
输入3通道5×5的特征图,利用3×3卷积,输出为2通道。
首先记一点,输出特征图的通道数是多少,那么该卷积层就有多少个卷积核。各个卷积核互相独立,分别负责输出特征图的某一通道。
例如,上图输出通道数为2,则该3×3的卷积层就会有2个卷积核(中间那两列粉色的)。而每个卷积核的深度(通道数)等于输入特征图的通道数,以一一对应进行运算。
对于本例,由于卷积核尺寸为3×3,则某个卷积核的某一层的参数数量为3×3=9。而卷积核的通道数等于输入特征图的通道数3,则该卷积核的参数数量为9×3=27。加上卷积过后还要进行偏置运算(bias),此时共28个参数。输出为2通道,因此共2个这样的卷积核,该卷积层总计可训练的参数数量为28×2=56。
直接数图中的参数数量,可以验证有56个可训练参数,也可以用torchsummary证实下:
from torchsummary import summary
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 2, 3, padding=1)
def forward(self, x):
x = self.conv1(x)
return x
net = Net()
summary(net, (3, 5, 5))
输出:
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Conv2d-1 [-1, 2, 5, 5] 56
================================================================
Total params: 56
Trainable params: 56
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.00
Params size (MB): 0.00
Estimated Total Size (MB): 0.00
----------------------------------------------------------------