卷积神经网络参数数目计算(pytorch框架)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_41122036/article/details/101264491

计算待训练参数数量

1、定义神经网络
  • 设定简单的卷积神经网络,只有一个卷积层和一个全连接层。
  • 卷积层为6个3×3的卷积核
  • 输入图片为大小为1×1×32×32
    从代码的角度来理解:
class Net(nn.Module):
    def __init__(self):
        # nn.Module子类的函数必须在构造函数中执行父类的构造函数
        super(Net, self).__init__()
        
        # 卷积层 '1'表示输入图片为单通道, '6'表示输出通道数,'3'表示卷积核为3*3
        self.conv1 = nn.Conv2d(1, 6, 3) 
        #线性层,输入1350个特征,输出10个特征
        self.fc1   = nn.Linear(1350, 10)  #这里的1350是如何计算的呢?这就要看后面的forward函数
    #正向传播 
    def forward(self, x): 
        print(x.size()) # 结果:[1, 1, 32, 32]
        # 卷积 -> 激活 -> 池化 
        x = self.conv1(x) #根据卷积的尺寸计算公式,计算结果是30,具体计算公式后面第二章第四节 卷积神经网络 有详细介绍。
        x = F.relu(x)
        print(x.size()) # 结果:[1, 6, 30, 30]
        x = F.max_pool2d(x, (2, 2)) #我们使用池化层,计算结果是15
        x = F.relu(x)
        print(x.size()) # 结果:[1, 6, 15, 15]
        # reshape,‘-1’表示自适应
        #这里做的就是压扁的操作 就是把后面的[1, 6, 15, 15]压扁,变为 [1, 1350]
        x = x.view(x.size()[0], -1) 
        print(x.size()) # 这里就是fc1层的的输入1350 
        x = self.fc1(x)        
        return x

net = Net()
print(net)

代码部分展示的神经网络前向传播过程为:
在这里插入图片描述

  • 卷积部分需要训练的参数分析:每个卷积核有3×3 = 9个权重参数和一个偏置参数,一共是10个参数。那么所有卷积参数为 6 × 3 × 3 + 6 = 60 6×3×3+6=60
  • 全连接部分参数分析:输入1350个量,输出10个量,根据普通的连接公式 y = w x + b y=wx+b ,得到待训练参数为 1350 × 10 + 10 = 13510 1350×10+10=13510
    综上,该神经网络训练参数总数是 60 + 13510 = 13570 60+13510=13570
另外,计算常见卷积神经网络模型训练参数数目参见博文:卷积神经网络参数计算

猜你喜欢

转载自blog.csdn.net/weixin_41122036/article/details/101264491