多通道卷积的参数数量计算

328 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

12.jpg

输入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
----------------------------------------------------------------