我将从以下几个方面来进行解说:
1.卷积神经网络的结构
2.卷积神经网络的计算
3.以AlexNet为例进行详细讲解

4.常见的两个卷积层设置的问题

1.卷积神经网络的结构

卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层)
我们用一个图进行展示:

2.卷积神经网络的计算

卷积神将网络的计算公式为:
N=(W-F+2P)/S+1
其中N:输出大小
W:输入大小
F:卷积核大小
P:填充值的大小
S:步长大小
下面举个例子看一下:

   nn.Conv2d(in_channels=3,out_channels=96,kernel_size=11,stride=4,padding=2)

卷积一层的几个参数:
in_channels=3:表示的是输入的通道数,由于是RGB型的,所以通道数是3.
out_channels=96:表示的是输出的通道数,设定输出通道数的96(这个是可以根据自己的需要来设置的)
kernel_size=12:表示卷积核的大小是12x12的,也就是上面的 “F”, F=12
stride=4:表示的是步长为4,也就是上面的S, S=4
padding=2:表示的是填充值的大小为2,也就是上面的P, P=2

假如你的图像的输入size是256x256的,由计算公式知N=(256-12+2x2)/4+1=63,也就是输出size为63x63的

3.以AlexNet为例进行详细讲解

AlexNet网络结构图如下图所示:

有结构图可以看出该网络有8层:五个卷积层,三个全连接层。

我们利用的框架是pytorch。

卷积神经网络的设置包括卷积层的设置以及正反向传播的设置
卷积层的设置代码如下:

    self.conv1 = torch.nn.Sequential(   #input_size = 227*227*3torch.nn.Conv2d(in_channels=3,out_channels=96,kernel_size=11,stride=4,padding=0),torch.nn.ReLU(),torch.nn.MaxPool2d(kernel_size=3, stride=2) #output_size = 27*27*96)self.conv2 = torch.nn.Sequential(   #input_size = 27*27*96torch.nn.Conv2d(96, 256, 5, 1, 2),torch.nn.ReLU(),torch.nn.MaxPool2d(3, 2)    #output_size = 13*13*256)self.conv3 = torch.nn.Sequential(   #input_size = 13*13*256torch.nn.Conv2d(256, 384, 3, 1, 1),torch.nn.ReLU(),    #output_size = 13*13*384)self.conv4 = torch.nn.Sequential(   #input_size = 13*13*384torch.nn.Conv2d(384, 384, 3, 1, 1),torch.nn.ReLU(),    #output_size = 13*13*384)self.conv5 = torch.nn.Sequential(   #input_size = 13*13*384torch.nn.Conv2d(384, 256, 3, 1, 1),torch.nn.ReLU(),torch.nn.MaxPool2d(3, 2)    #output_size = 6*6*256)self.dense = torch.nn.Sequential(torch.nn.Linear(9216, 4096),torch.nn.ReLU(),torch.nn.Dropout(0.5),torch.nn.Linear(4096, 4096),torch.nn.ReLU(),torch.nn.Dropout(0.5),torch.nn.Linear(4096, 50)
)

下面我们一层一层的进行分析
卷积一层:

self.conv1 = torch.nn.Sequential(   #input_size = 227*227*3torch.nn.Conv2d(in_channels=3,out_channels=96,kernel_size=11,stride=4,padding=0),torch.nn.ReLU(),torch.nn.MaxPool2d(kernel_size=3, stride=2) #output_size = 27*27*96)

下面详细介绍一下下

self.conv1 = torch.nn.Sequential(   #input_size = 227*227*3

可以看到我们的输入为227x227x3的,也就是所size为227x227的,通道数是3,为RGB型图像

 torch.nn.Conv2d(in_channels=3,out_channels=96,kernel_size=11,stride=4,padding=0),

有上面的介绍我们可以计算出其输出的大小为:N=(227-11+2x0)/4+1=55,即卷积后的尺寸是96x55x55的
神经元数目为555596 =290400个,本层的神经元数目为2727256 =186642个
激活函数Relu,在神经网络中的作用是:通过加权的输入进行非线性组合产生非线性决策边界
简单的来说就是增加非线性作用。
在深层卷积神经网络中使用激活函数同样也是增加非线性,主要是为了解决sigmoid函数带来的梯度消失问题。
关于Rule的具体指知识,这里不做详细的描述,以后再进行详细讲解

torch.nn.MaxPool2d(kernel_size=3, stride=2) #output_size = 27*27*96

MaxPool 最大池化层,池化层在卷积神经网络中的作用在于特征融合和降维。池化也是一种类似的卷积操作,只是池化层的所有参数都是超参数,是学习不到的。
这里的最大池化操作:将2x2尺寸内的所有像素值取最大值作为输出通道的像素值。
输出大小的计算和卷积层的计算过程一样就是利用公式N=(W-F+2P)/S+1,由公式计算得知,该输出大小
N=(55-3+2x0)/2+1=27,则输出为96x27x27,
卷积二层

self.conv2 = torch.nn.Sequential(   #input_size = 27*27*96torch.nn.Conv2d(96, 256, 5, 1, 2),torch.nn.ReLU(),torch.nn.MaxPool2d(3, 2)    #output_size = 13*13*256
)

我们可以看到卷积2层的输入为96x27x27的,也就是上一层的输出,从这里也就知道,上一层的输出为下一层的输入。
卷积2层的计算过程和卷积1层的计算过程是一样的,具体不在详细描述
卷积2层最终输出为13x13x256,本层的神经元数目为27x27x256 =186642个
卷积3层最终输出为13x13x384,本层的神精元数目为13x13x384 =64896个
卷积4层最终输出为13x13x384,本层的神精元数目为13x13x384 = 64896个
卷积5层最终输出为6x6x256,本层的神精元数目为6x6x256=9216个
卷积层介绍完了,下面看一下全连接层(Linear)
全连接层的作用主要是负责逻辑推断,所有的参数都必须学习得到。

self.dense = torch.nn.Sequential(torch.nn.Linear(9216, 4096),torch.nn.ReLU(),torch.nn.Dropout(0.5),torch.nn.Linear(4096, 4096),torch.nn.ReLU(),torch.nn.Dropout(0.5),torch.nn.Linear(4096, 50))

可以看到有3三层全连接层(与上面相连接,也就是第六、七、八层)

torch.nn.Linear(9216, 4096)

第一层全连接层(第六层)的作用有两个
第一:链接卷积层的输出
第二:去除空间信息(通道数),是一种将三维矩阵转变成向量的过程(一种全卷积操作)
其操作可以看成是输入图像为WxHxC,卷积核的尺寸为WxHxC,这样卷积后的尺寸为1x1x1,这样整个出入图像变成了一个数,一共有K个数(第一层全连接层后的神经元数)。
第6层输入数据的尺寸是6x6x256,采用6x6x256尺寸的滤波器对第六层的输入数据进行卷积运算;每个6x6x256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果,通过一个神经元输出这个运算结果;共有4096个6x6x256尺寸的滤波器对输入数据进行卷积,通过4096个神经元的输出运算结果;然后通过ReLU激活函数以及dropout运算输出4096个本层的输出结果值。

第二层全连接层(第七层):
第6层输出的4096个数据与第7层的4096个神经元进行全连接,然后经由ReLU和Dropout进行处理后生成4096个数据。

第三层全连接层(第八层):
第7层输入的4096个数据与第8层的50个神经元进行全连接,经过训练后输出被训练的数值。
正反向传播的顺序设置代码如下:

def forward(self, x):   #正向传播过程conv1_out = self.conv1(x)conv2_out = self.conv2(conv1_out)conv3_out = self.conv3(conv2_out)conv4_out = self.conv4(conv3_out)conv5_out = self.conv5(conv4_out)res = conv5_out.view(conv5_out.size(0), -1)out = self.dense(res)#print (out)return out

这里的顺序就是:

  1. 开始的数据的输入作为第一层卷积层的输入,得到第一层卷积层的输出;
  2. 第一层卷积的输出作为第二层卷积层的输入,得到第二层卷积层的输出:
  3. 第二层卷积的输出作为第三层卷积层的输入,得到第三层卷积层的输出:
  4. 第三层卷积的输出作为第四层卷积层的输入,得到第四层卷积层的输出:
  5. 第四层卷积的输出作为第五层卷积层的输入,得到第五层卷积层的输出:
  6. 第五层卷积层的输出转变为一维向量形式作为第一层全连接层的输入,得到第一层全连接层的输出;
  7. 第一层全连接层的输出与第二层全连接层的神经元进行全连接得到第二层全连接层的输出;
  8. 第二层全连接层的输出与第三层全连接层的神经元进行全连接得到第三层全连接层的输出,也就是我们想要的参数。

4.常见的两个卷积层设置问题

 self.conv1 = nn.Conv2d(3, 6, 5)

问题一:为什么是cove2d?

cove1d:用于文本数据,只对宽度进行卷积,对高度不进行卷积
cove2d:用于图像数据,对宽度和高度都进行卷积

问题二:为什么卷积核大小5x5写一个5?

Conv2d(输入通道数, 输出通道数, kernel_size(长和宽)),当卷积核为方形时,只写一个就可以
卷积核不是方形时,长和宽都要写:

self.conv1 = nn.Conv2d(3, 6, (5,3))

问题三:池化层的作用

maxpooling有局部不变性而且可以提取显著特征的同时降低模型的参数,从而降低模型的过拟合。
因为只是提取了显著特征,而舍弃了不显著的信息,是的模型的参数减少了,从而一定程度上可以缓解过拟合的产生。

卷积神经网络中各个卷积层的设置及输出大小计算的详细讲解相关推荐

  1. 卷积层和全连接层的区别_卷积神经网络中全连接层作用理解总结

    前言 一般来说,卷积神经网络会有三种类型的隐藏层--卷积层.池化层.全连接层.卷积层和池化层比较好理解,主要很多教程也会解释. •  卷积层(Convolutional layer)主要是用一个采样器 ...

  2. 【TensorFlow】TensorFlow从浅入深系列之十一 -- 教你深入理解卷积神经网络中的卷积层

    本文是<TensorFlow从浅入深>系列之第11篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  3. 卷积神经网络中的卷积操作与信号系统中的卷积区别

    本科期间信号系统中学习到了卷积概念, 卷积是两个变量在某范围内相乘后求和的结果.如果卷积的变量是序列x(n)和h(n),则卷积的结果 其中星号*表示卷积.当时序n=0时,序列h(-i)是h(i)的时序 ...

  4. 卷积神经网络中全连接层、softmax与softmax loss理解

    1.全连接层 假设全连接层前面连接的是一个卷积层,这个卷积层的num output是100,就是卷积之后输出一百张不同的特征图.每个特征的大小是4X4,那么在将这些特征输入给全连接层之前会将这些特征f ...

  5. 【随笔】卷积神经网络中的卷积怎么卷?

    最近在看<深度学习之美:AI时代的数据处理与最佳实践>发现对于卷积核深度的理解有点混淆. 于是又看了<TensorFlow:实战Google深度学习框架(第2版)>,分清了卷积 ...

  6. 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层

    本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  7. 卷积神经网络中的全连接层

    卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层) 在上一篇博客中(http ...

  8. xml文件 卷积神经网络_理解卷积神经网络中的输入与输出形状(Keras实现)

    即使我们从理论上理解了卷积神经网络,在实际进行将数据拟合到网络时,很多人仍然对其网络的输入和输出形状(shape)感到困惑.本文章将帮助你理解卷积神经网络的输入和输出形状. 让我们看看一个例子.CNN ...

  9. 卷积神经网络详解 - 卷积层逻辑篇

    本系列文章为深度学习笔记,方便自己回看. 卷积计算概述 对于图像识别来说,卷积神经网络的效果要好于全连接神经网络.我在首次接触卷积时,隐约记得在大一高数课程中曾经提及,但具体已经无法名状.何谓卷积,知 ...

最新文章

  1. 干货|浅谈强化学习的方法及学习路线
  2. oracle服务器找不到怎么解决,简析Oracle数据库常见问题及解决方案
  3. apache lucene_全文搜索Apache Lucene简介
  4. Ubunt 配置网络服务
  5. Discuz素材资源下载官网门户+自带论坛 整站源码+带后台+带数据库
  6. Confluence 6 PostgreSQL 创建数据库和数据库用户
  7. python--图像轮廓findContours
  8. C语言猜数字游戏代码
  9. Easy Audio CD Burner 算法分析及逆向推算(图)
  10. JavaScript线条变形动画网页js特效
  11. [转] 快速掌握一个语言最常用的50%
  12. 获取Google Advertising ID作为唯一识别码
  13. 经纬高坐标系转到东北天坐标系
  14. nRF24L01+ 数据手册
  15. 中国象棋局面识别 -2.象棋棋子的识别
  16. 考驾照 科目一 笔记
  17. 从零打造一个机器人002【初识机器人操作系统--ROS】
  18. mysql注入扫描网站漏洞工具_sql注入点扫描工具下载-PHP+MYSQL网站注入扫描工具免费版 - 维维软件园...
  19. Apache Kafka 在 vivo 的实战
  20. CHINA-PUB 网上书店购书优惠券

热门文章

  1. XXL-JOB注册执行流程
  2. 第一期中国最受欢迎50大技术博客评选结果出炉
  3. 在windows上执行certutil命令时报错CertUtil: WsResetMetadata
  4. 霍夫变换绘制出图案里的直线
  5. 网页设计-HTML各种标签
  6. Plsql 最新版本链接oracle 最新版本详解(14.0)
  7. 个人用户升级鸿蒙,华为鸿蒙系统手机版12月16日发布,普通用户啥时能升级?...
  8. 网站建设报价为什么差异那么大?
  9. 空洞骑士:简单开场场景搭建
  10. 怀孕时孕吐怎么办?这2种水果有助于缓解孕吐反应