自我介绍
鼠鼠今年大三,考研压力大,且本科专业不考研的话只能选择进厂。不过身为一个本科生有幸加入高手云集的团队,有各种资源,所以选择自学机器学习 深度学习。目标的话希望毕业之后能成为大模型工程师。
选择在大佬横行的稀土掘金发文章的主要原因有两点吧,第一是把自己理解的展示出来,有错误能被大佬指出来缩短学习周期,第二是定期更新,变相的监督自己,坚持下去。
卷积池化
简单的说一下我理解的卷积和池化。 卷积:提取局部特征,参数少,学习特征模式。 池化:降维,保留主要信息。
详细介绍可以去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…]
结尾
这是我账号第一次发文章,账号和我一样都是小白,所有内容均是个人理解,如果有错误还请大佬在帖子下留言指正,不胜感激。