热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

卷积层的通道数怎么设定(卷积神经网络的卷积核是怎么得到的)

我将从以下几个方面来进行解说:一、卷积神经网络的结构二、卷积神经网络的计算三、以AlexNet为例进行详细讲解四、常见的两个卷积层设置的问题一、卷积神经网络的结构卷积神经网络(CN


从以下几点进行解说。


一、卷积神经网络的结构二、卷积神经网络的计算三、以AlexNet为例详细说明


四、常见的两个卷积层的设置问题


一、卷积神经网络的结构卷积神经网络(CNN )是输入层、卷积层、激活函数、池化层、所有连接层,即INPUT (输入层(-CONV )-RELU )激活函数)-POOL




二、卷积神经网络的计算卷积神将网络的计算公式设为n=(w-f2p )/S 1


(输出大小w )输入大小f )卷积核心大小p )填充值的大小s )步长大小以下是一个例子。


nn.conv2d(in_channels=3,out_channels=96,kernel_size=11,条纹=4,填充=2)在图像输入size为256x256的情况下


卷积层的几个参数:


in_channels=3:表示输入的通道数,由于是RGB型,所以通道数表示3.out_channels=96:表示输出的通道数,设定输出通道数的96 (可以根据需要设定) F=12stride=4:表示步长为4,即上面的s、S=4padding=2:表示填充值的大小为2,即上面的p、P=2


三、以AlexNet为例进行详细讲解 AlexNet网络结构图如下图所示。




从结构图中可以看到,该网络有8层。 五个卷积层,三个全连接层。 使用的框架是pytorch。 卷积神经网络的设置包括卷积层的设置和正反传播的设置。 卷积层的设定代码为self.con v1=torch.nn.sequential (# input _ size=227 * 227 * 3


torch.nn.conv2d(in_channels=3,out_channels=96,kernel_size=11,stride=4,填充=0),


torch.nn.ReLU ()、


Torch.nn.max Pool 2d (Kernel _ size=3,stride=2) #输出_ size=27 * 27 * 96




self.con v2=torch.nn.sequential (# input _ size=27 * 27 * 96


Torch.NN.Conv 2d (96,256,5,1,2 )、


torch.nn.ReLU ()、


torch.nn.max pool 2d (3,2 ) #输出_大小=13 * 13 * 256




self.con v3=torch.nn.sequential (# input _ size=13 * 13 * 256


Torch.NN.Conv 2d (256,384,3,1,1 )、


torch.nn.ReLU (,#output_size=13*13*384




self.con v4=torch.nn.sequential (# input _ size=13 * 13 * 384


Torch.NN.Conv 2d (384,384,3,1,1 )、


torch.nn.ReLU (,#output_size=13*13*384




self.con v5=torch.nn.sequential (# input _ size=13 * 13 * 384


Torch.NN.Conv 2d (384,256,3,1,1 )、


torch.nn.ReLU ()、


torch.nn.max pool 2d (3,2 ) #输出_大小=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)
)

1.1、卷积一层:

self.conv1 = torch.nn.Sequential( #input_size = 227*227*3
torch.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,即卷积后的尺寸是55x55x96

激活函数Relu,在神经网络中的作用是:通过加权的输入进行非线性组合产生非线性决策边界简单的来说就是增加非线性作用。在深层卷积神经网络中使用激活函数同样也是增加非线性,主要是为了解决sigmoid函数带来的梯度消失问题。

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

1.2、卷积二层

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

我们可以看到卷积2层的输入为27x27x96的,也就是上一层的输出,从这里也就知道,上一层的输出为下一层的输入。

卷积2层最终输出为13x13x256,本层的神经元数目为13x13x256 =43264个卷积3层最终输出为13x13x384,本层的神经元数目为13x13x384 =64896个卷积4层最终输出为13x13x384,本层的神经元数目为13x13x384 = 64896个卷积5层最终输出为6x6x256,本层的神经元数目为6x6x256=9216个

1.3、全连接层

卷积层介绍完了,下面看一下全连接层(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三层全连接层(与上面相连接,也就是第六、七、八层)

第一层全连接层(第六层)的作用有两个

第一:连接卷积层的输出第二:去除空间信息(通道数),是一种将三维矩阵转变成向量的过程(一种全卷积操作),其操作可以看成是输入图像为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

这里的顺序就是:

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

四、常见的两个卷积层设置问题 self.conv1 = nn.Conv2d(3, 6, 5)

问题一:为什么是cove2d?

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

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

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

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

问题三:池化层的作用

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

https://blog.csdn.net/sinat_42239797/article/details/90646935


推荐阅读
  • Visualizing and Understanding Convolutional Networks(ZFNet网络)论文阅读笔记
    VisualizingandUnderstandingConvolutionalNetworksZFNet网络架构论文阅读笔记2022.4.4论文地址https:arxiv ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • pytorch Dropout过拟合的操作
    这篇文章主要介绍了pytorchDropout过拟合的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完 ... [详细]
  • PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchv ... [详细]
  • YOLOV4 Pytorch版本训练自建数据集和预测
    1.程序下载本文程序核心部分完全参考开源代码:https:github.comWongKinYiuPyTorch_YOLOv4。只是从一种学习的角度去写了我的代码仓库,在基础上增加 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • S3D算法详解
    S3D论文详解论文地址:RethinkingSpatiotemporalFeatureLearning:Speed-AccuracyTrade-offsinVide ... [详细]
  • 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和 ... [详细]
  • navicat生成er图_实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题
    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题。本文对ACL2020KBQA基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读 ... [详细]
author-avatar
-彼岸花开-hui
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有