CNN自学笔记-卷积池化篇

33 阅读3分钟

自我介绍

鼠鼠今年大三,考研压力大,且本科专业不考研的话只能选择进厂。不过身为一个本科生有幸加入高手云集的团队,有各种资源,所以选择自学机器学习 深度学习。目标的话希望毕业之后能成为大模型工程师。

选择在大佬横行的稀土掘金发文章的主要原因有两点吧,第一是把自己理解的展示出来,有错误能被大佬指出来缩短学习周期,第二是定期更新,变相的监督自己,坚持下去。

卷积池化

简单的说一下我理解的卷积和池化。 卷积:提取局部特征,参数少,学习特征模式。 池化:降维,保留主要信息。

详细介绍可以去B站看一下详细介绍 [大白话讲解卷积神经网络工作原理_哔哩哔哩_bilibili] [膜拜!绝对找不到第二个如此通俗易懂的【CNN卷积神经网络】教程,同济大佬全程大白话讲解,听懂人话就能学会!_哔哩哔哩_bilibili] 总而言之,卷积和池化就像帮模型做了特征提炼和重点标记的预处理,让机器更准确地学习图像中的关键部分,而不是被冗余信息干扰。

代码中卷积和池化部分为:

代码:

import torch.nn as nn

class simplecnn(nn.Module):
    def __init__(self,num_class): # num_class是我们的分类数
        super().__init__()
        self.features = nn.Sequential( # 做特征提取
            nn.Conv2d(3,16,kernel_size=3,stride=1,padding=1), # 保持图像大小不变 16* 224*224
            nn.ReLU(), # 卷积之后接上激活函数 增加非线特征
            nn.MaxPool2d(kernel_size=2,stride=2), # 池化之后变为 16*112*112
            nn.Conv2d(16,32,kernel_size=3,stride=1,padding=1), # 保持图像大小不变 32* 112 *112
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2,stride=2) # 图像大小变为 32*56*56
        )

在这部分代码中先卷积一次接着池化一次,再卷积一次接着再池化一次。两次卷积两次池化。

默认数据为3×224×224 nn.Conv2d(3,16,kernel_size=3,stride=1,padding=1)中3是输入特征通道数及卷积核深度,16为卷积核个数即输出特征通道数。步长为1,填充为1,卷积核为3*3。 经过第一次卷积后数据变为16×224×224,卷积核为16个3×3×3. 经过第一次池化后数据变成16×112×112。 经过第二次卷积后数据变成32×112×112,卷积核为32个16×3×3. 经过第二次池化数据变成32×56×56. 这个地方我思考了很久很久才搞明白,还有一些地方没有说到,比如为什么第一次卷积后数据大小保持不变,以及第一次池化数据为为什么缩小为原来的1/2,这些相较于语言和文字借助动图可以更快的理解。 [ezyang.github.io/convolution…] [thomelane.github.io/convolution…]

结尾

这是我账号第一次发文章,账号和我一样都是小白,所有内容均是个人理解,如果有错误还请大佬在帖子下留言指正,不胜感激。