1 问题

在深度学习的卷积网络过程中,神经网络有卷积层,池化层,全连接层。而池化层有最大值池化和均值池化两种情况,而我们组就在思考,最大值池化和均值池化有什么区别呢?两者的模型准确率是否有所不同?

2 方法

这是所有的代码,主要改变卷积层中的最大值池化和均值池化的相关代码即可。也就是maxpool2d和avgpool2d的应用。

class MyNet(nn.Module):
   # (5.2)定义网络有哪些层,这些层都作为成员变量
   def __init__(self) -> None:
       super().__init__()
       self.conv1=nn.Conv2d(in_channels=1,out_channels=16,
           kernel_size=3,stride=1,padding=1)
       self.conv2=nn.Conv2d(in_channels=16,out_channels=32,
           kernel_size=3,stride=1,padding=1)
       self.max_pool=nn.MaxPool2d(kernel_size=2,
           stride=2)
       #self.avg_pool=nn.AvgPool2d(kernel_size=2,stride=2)
       self.fc=nn.Linear(in_features=32*14*14,
           out_features=10)
   def forward(self, x):
       x=self.conv1(x)
       x=self.conv2(x)
       x=self.max_pool(x)
       #x=self.avg_pool(x)
       #[B,C,H,W]
       #1的目的是拉伸C,H,W,不拉伸B
       x=torch.flatten(x,1)
       out=self.fc(x)
       return out

f4aa04d0d254cd6ef104fac9fd0bbc98.png

51ec002ca54e9641cf9e7d8c7f9e3185.png1dba10385fc7fceb75cbc1617aaa3a8b.png然后我们训练了100个周期,通过比较2者的准确率和损失值来比较分析。

两者分别是均值池化和最大值池化,可以从图中看出,不论是均值池化还是最大值池化,两者的准确率都是前10个周期准确率猛增。而在10个周期之后,均值池化的准确率是基于平稳的,并且train和val的准确率是交错的。最大值池化的准确率还是在继续增长,虽然增长幅度不是太大,并且train和val的准确率是分开的,一直保持没有交错。

均值池化的test准确率为9e55a962d8a5fd69fb45d73142a35c34.png

最大值池化的test准确率为54f1e1ef7d8b3cdf5721996346c140e6.png

能够看出来,最大值池化的准确率高于均值池化的准确率。

两者分别是均值池化和最大值池化,可以看出两者的loss率其实差别不大,但是最大值池化的loss下降明显先猛烈下降然后再逐渐下降的,均值池化是先猛烈下降然后基于平稳的。99165ec67b9299131cce391f770bc290.pngdeb07a676cf8a687557dd8f2667e9b3c.png

3 结语

对于均值池化和最大值池化的比较分析,我们运用了100个周期训练模型然后画图比较准确率和loss,发现最大值池化的准确率高于均值池化的准确率,但是均值池化的准确率在训练周期较少时,准确率较高,而最大值池化的准确率在训练周期较多时,准确率较高,说明这个方法是有效的,但是本次实验并没有对一个方法进行多次训练,较少偶然性,未来我们可以继续研究多次训练之后的模型的预测准确率是否有较大差异,来验证是否具有实验偶然性。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐