CNN中feature map、卷积核、卷积核的个数、filter、channel的概念解释
参考链接: https://blog.csdn.net/xys430381_1/article/details/82529397
作者写的很好,解决了很多基础问题。
feather map理解
这个是输入经过卷积操作后输出的结果,一般都是二维的多张图片,在论文图上都是以是多张二维图片排列在一起的(像个豆腐皮一样),它们其中的每一个都被称为\(feature \quad map\)
feather map 是怎么产生的
有几个卷积核就会产生几个\(feather \quad map\)。输入数据经过卷积操作输出\(feather \quad map\),从名字也可以知道(翻译就是特征图)这个是经过卷积核提取后得到的特征。
多个\(feather \quad map\)就意味着我们提取了多个特征值,这样或许就可以更加准确地识别数据。
卷积核的理解
卷积核又名过滤器(\(filter\))。
每个卷积核有三个属性:长宽深,这里一般深度不需要自己定义,深度是和输入的数据深度相同;
有多少个卷积核就有多少个\(feather \quad map\);
例如在\(pytorch.nn.Conv2d()\)函数中:
torch.nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2)
#二维卷积层,输入通道数1,输出通道数16(相当于有16个filter,也就是16个卷积核),卷积核大小为5*5*1(因为输入的通道数为1,所以这里卷积核的深度也就自动设置为1了),步长为1,零填充2圈
#经过计算,可以得到卷积输出的图像的大小和输入的图像大小是等大小的,但是深度不一样,为28*28*16(16为深度),因为这里的padding抵消了卷积的缩小
卷积核的个数:看到很多文章,一般都说随着网络的加深,\(feather\quad map\)的长宽尺寸会变小,也就是卷积提取的特征越具有代表性,所以后面的卷积层数需要增加,所以卷积核的个数也是要增加的,一般是成倍增加(有的会更根据实验的情况来具体设置)。下面的图示很好的说明了这个:(中间的就是卷积核,这是一个三维的卷积核,是一个,所以输出为一个\(feather \quad map\))
CNN学习过程:更新卷积核的值(也就是更新卷积核中的数值)
开始的卷积核的值是随机的,之后每次的向后计算的过程中会得出这个图像的类别,当然这个第一次的结果大部分都是不准确的,之后经过\(loss\quad function\)的作用,CNN会更新这些卷积核中的值,然后再来一次学习。这样经过多次的学习,CNN就会找到卷积核的最佳参数,使得提取的特征能准确区分这些图片,这样也就完成了CNN的学习过程。