卷积神经网络(pytorch)一些比较简单的总结

众所周知,cnn的原理是

cnn的流程,摘自B站 av16175135

1、卷积核:

在第一步卷积计算的过程中,有一个非常重要的东西叫卷积核,

1.1、名字:

卷积核也叫滤波器,有些文章叫kernel,有些文章叫Filter,甚至有人叫感受野(receptive filed)其实都是一样东西

1.2、是什么:

一个卷积核包含图像的一种特征,做卷积运算实际上说白了就是在计算卷积核上面的特征和图像上面特征的相似度,相似度越高,越认为这图就是拥有此特征。

1.3、卷积核的特点:

卷积核的长度和宽度由超参数(也就是一开始手动设定的)决定,(从VGG有启发,一般来说设置为3*3这种比较小的),深度就必须一定要和数据集的输入深度一致!卷积核能够自学习,因此只要一开始给定kernel size就可以了

这些超参数是怎么确定的呢?可以参考一下

https://yq.aliyun.com/articles/610509

这里还是要多说一下深度,对于图片来说,深度就是通道,对于输入深度来说,常见的有单通道灰度,三通道RGB,四通道ARGB,而对于输出深度来说就是一个超参数了,这里有一个规定,输出深度=卷积核的个数,一个卷积核(也就是一种卷积核)负责提取一个特征,(数量通常为2^n),就目前来看,超参数通过trial-and-error(试错)来确认,没有捷径。

卷积核、滤波器、感受野



2、初始化卷积层:

对于图像的二维卷积,pytorch有这个函数:

torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode='zeros')

--in_channels  =>  输入图像的通道数(矩阵深度)

--out_channels => 输出卷积后的深度(Feature Map的个数,也就是在卷积计算过程中卷积核的个数,也就是希望提取特征的个数

--kernel_size => 卷积核的大小(如果只有一个数字,则认为是正方形的,也可以用一个tuple来设定形状,形状一般为奇数*奇数,偶数*偶数会导致feature map大小不一致)

--stride => 卷积步长(每一次卷积计算完成之后,平移多少个像素)

--padding => padding的层数(当padding_mode='zero'的时候,padding操作就是补零操作,要使feature map的大小与原图大小一致,则padding=1

--dilation => 卷积核元素之间的间距


dilation=1的时候

--groups => 从输入通道到输出通道的阻塞连接数(即输入和输出之间的连接)

                     group=1,输出是所有的输入的卷积;

                     group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来

                     groups = in_channels,每个输入通道都具有自己的一组过滤器,大小为[\frac{out\_channels}{in\_channels}]

--bias => 偏置 (是否在结果中加入一个能自学习的偏置量)



3、开始卷积运算

3.1、卷积运算的过程(其实不用理会也可以,这里列出来只是好理解一点)

①、卷积核翻转180°

②、把卷积核中心对准像素x

③、对应元素相乘

④、相乘之后的值求均值(也就是每个值相加,并除以卷积核的元素个数),没有元素的地方补零(padding)

⑤、把加起来的值放到一边

⑥、平移卷积核,继续计算其他卷积

⑦、把所有计算之后的值放到一个矩阵里面,这个矩阵就叫做Feature Map

3.2、输入张量

Conv2d输入是(N,C_{in},H_{in},W_{in})

N => batch_size

C_{in}=> 输入图像通道数量

H_{in}=> 输入图像的高度

W_{in}=> 输入图像的宽度

Conv2d输出是(NC_{out}, H_{out}, W_{out}

输出的公式为:H_{out}/W_{out} = \frac{H_{in}/W_{in} + 2*padding - F}{stride}+1    其中F感受野F = dilation[H/W] * (kernel\_size[H/W] -1)



4、激活(CV中通常使用ReLU)

ReLU:这个没啥好说的,把上面卷积之后的结果是负数的全部抹零(不激活),>=0的不变

如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。

Tanh函数在文本和音频处理有比较好的效果。

torch.nn.ReLU(inplace=False)

--inplace 是否覆盖原变量  (要是不覆盖,就要多一个内存空间来储存计算后的变量,覆盖了就不用,可以节省一点内存)



5、池化(Pooling)(也叫下采样,向下采样,让图片变模糊)

5.1、池化是什么

在不损失图像该有的信息的情况下,缩小图像,从而达到减少参数、加快收敛速度的目的

5.2、为什么池化

单通道图像中,一个像素点有一个权重(weight),三通道图像一个像素点就有3个权重。比如说一张128*128*1的图像中,一共有128*128=29184个权重,当经过2*2的池化层处理之后,图像变成64*64,此时的权重个数变成4096,参数量大大减少。

5.3、怎么样池化

池化有两种池化方式:

最大值池化(MaxPooling)(常用)   (常用的原因:因为卷积的结果是与原图的相似度,那几个相似度中取最大那个,到最后判断的时候就容易很多了)

均值池化(AveragePooling)

池化原理:


最大值池化原理

对于二维最大值池化,pytorch中有:

torch.nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)

--kernel_size => 池化核的大小, 和卷积核大小的设定一样,int为正方形,tuple为自定义大小(池化核越大,损失的信息越多)

--stride => 步长,(默认值为kernel_size,也就是相邻)

--padding => padding层数 (基本上很少用)

--dilation => 池化核元素直接的间距

--return_indices => 如果为True,则将返回最大索引以及输出。以后对torch.nn.MaxUnpool2d有用

--ceil_mode => 为True时,将使用ceil(向上取整)而不是floor(向下取整)来计算输出形状

5.4、对于输出大小的计算:

与卷积核的计算一样,边长基本上变成\frac{1}{kernel\_size} ,比如(2,2),图像长度就边长原理的\frac{1}{2}



6、最后阶段

6.1、全连接层(现在都9102年了!早就不用全连接了!这里是为了尊敬一下前辈们,介绍一下)

全连接就是逻辑回归,也就是分类器!不分类怎么知道这个是什么类别?

torch.nn.Linear(in_features,out_features,bias=True)

--in_features => 输入的网络神经元个数(也就是features的个数,也就是滤波器的个数)

--out_features => 输出的网络神经元个数,就是通过线性模型之后,剩下多少个freature

--bias => 偏置量

6.2、全卷积网络(FCN)

顾名思义,就是在最后阶段用卷积进行输出

全连接使用的是图像的全局信息,卷积使用的是局部信息,可是最大的局部就是全局呀!

全卷积网络由论文 Fully Convolutional Networks for Semantic Segmentation 提出

这里我留个坑,等我看完论文之后之后再来写

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353