卷积、池化操作的尺寸变化
用代码看下各层信息(以ResNet18为例)
model=models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1) #初始化模型 print(model) #查看模型层信息 summary(model,(1,3,224,224)) #输入输出信息
从上图得知,用了64个3通道的卷积核(尺寸7,步长2,扩充3)、池化核尺寸3步长2扩充1
对于(1,3,224,224)的输入,卷积后输出64个112*112的特征图,池化后输出64个56*56的特征图
卷积和池化后尺寸计算公式,默认向下取整
三个关键词:
-
- kernel_size——卷积核大小
- padding——边缘扩充,一般四周填充0
- stride——卷积核移动步长
卷积核会按步长遍历图像,把卷积核框住的像素进行卷积(对应像素相乘求和)得到1个中心像素值(例如3*3的核9个像素用1个像素代表)。卷积就是把卷积核范围内的像素变成中心一个像素。
为了使卷积核的中心可以遍历边缘的像素,所以通过padding扩充原图。
另一个案例
上图中网络结构:2个卷积层(Convolutions)+2个池化层(Subsampling)+3个全连接层(Full connection)
上图中数据的计算:
32*32如何得到28*28,5*5的卷积核(默认步长为1,无pading)遍历图像,图像边缘处上下左右各丢失2行(列)像素,所以32-4=28。
14*14如何得到10*10,计算同上,14-4=10。
28*28→14*14与10*10→5*5是如何得到的,下述代码中池化层设置的是2,即图像大小除2
@前的1→6→16是如何得到的,1是32*32的原图为单通道(RGB图要写成3),6、16是下述代码中卷积层设置的。
16@5*5即400→120→84→10是如何得到的,120、84是下述代码中全连接层设置的,10是类别数(即分10类问题,如果是分猫狗两类,那就是2)
值得注意的是上图的16@5*5中的5*5(下图绿框)是计算出来的:1、10是单通道图,10分类问题。其他数据可以自己设定。
32*32原图→经5*5卷积→28*28图→经池化层参数2→14*14图→经5*5卷积→10*10图→经池化层参数2→5*5图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?