马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
卷积神经网络(Convolutional Neural Networks, CNN)是深度学习范畴中用于处理惩罚具有网格结构的输入(如图像和视频)的神经网络模子。下面以最简朴、直观的方式概述CNN的重要流程及其根本概念:
1. 输入层
- 概念:输入层直接吸取原始数据,比如一张图片,通常是一张二维或三维的矩阵,包罗像素信息。
- 流程:比方,输入一张28x28像素的灰度图像,形成一个28x28的矩阵,每个元素代表一个像素的亮度值。
2. 卷积层
- 概念:卷积层通过卷积核(或称滤波器)扫描输入数据,辨认特定的特性。卷积核是一个小的矩阵,它会与输入数据的局部地区做元素相乘再求和的操纵。
- 流程:一个3x3的卷积核在输入图像上滑动,每次覆盖9个像素,盘算一个值,如许就形成了一个“特性图”,可以或许捕捉图像中的根本特性,如边沿、纹理等。
3. 激活函数
- 概念:激活函数引入了非线性变更,使得网络可以或许学习更复杂的模式。
- 流程:通常在卷积操纵后应用,如ReLU(Rectified Linear Unit),它会将全部负值置为0,生存和放大正值,增强网络的表达本领。
4. 池化层
- 概念:池化层用于低落数据的维度,同时生存紧张信息,增强模子对位置稍微变革的鲁棒性。
- 流程:常见的有最大池化(取局部地区的最大值)和匀称池化(取局部地区的匀称值),通常利用2x2的窗口,步长为2,将特性图的尺寸减半。
5. 全毗连层
- 概念:全毗连层毗连全部神经元,用于整合全部特性,做出终极的分类或回归推测。
- 流程:将卷积和池化后的多维特性图展平为一维向量,通过权重矩阵映射到分类标签的空间,输出每个种别的概率。
6. 输出层
- 概念:输出层给出终极的分类决议或回归结果。
- 流程:在分类任务中,通常通过softmax函数将全毗连层的输出转换为概率分布,推测概率最高的种别为最闭幕果。
整个过程可以概括为:原始图像输入 → 卷积提取特性 → 激活非线性变更 → 池化降维 → 全毗连层整合特性 → 输出层给出推测结果。
通过多层的卷积和池化处理惩罚,CNN可以或许从原始像素中主动学习和提取多条理的特性,终极用于辨认和分类。
- class CNN(nn.Module):
- def __init__(self):
- super(CNN, self).__init__()
- self.conv1 = nn.Sequential( # 输入大小 (1, 28, 28)
- nn.Conv2d(
- in_channels=1, # 灰度图
- out_channels=16, # 要得到几 多少个特征图
- kernel_size=5, # 卷积核大小
- stride=1, # 步长
- padding=2, # 如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 if stride=1
- ), # 输出的特征图为 (16, 28, 28)
- nn.ReLU(), # relu层
- nn.MaxPool2d(kernel_size=2), # 进行池化操作(2x2 区域), 输出结果为: (16, 14, 14)
- )
- self.conv2 = nn.Sequential( # 下一个套餐的输入 (16, 14, 14)
- nn.Conv2d(16, 32, 5, 1, 2), # 输出 (32, 14, 14)
- nn.ReLU(), # relu层
- nn.Conv2d(32, 32, 5, 1, 2),
- nn.ReLU(),
- nn.MaxPool2d(2), # 输出 (32, 7, 7)
- )
-
- self.conv3 = nn.Sequential( # 下一个套餐的输入 (16, 14, 14)
- nn.Conv2d(32, 64, 5, 1, 2), # 输出 (32, 14, 14)
- nn.ReLU(), # 输出 (32, 7, 7)
- )
-
- self.out = nn.Linear(64 * 7 * 7, 10) # 全连接层得到的结果
- def forward(self, x):
- x = self.conv1(x)
- x = self.conv2(x)
- x = self.conv3(x)
- x = x.view(x.size(0), -1) # flatten操作,结果为:(batch_size, 32 * 7 * 7)
- output = self.out(x)
- return output
复制代码 1. 再到场一层卷积,结果怎么样?
在神经网络中,增长一层卷积层通常可以增强模子的表征本领,使其可以或许学习到更复杂的特性。但是,这同样会增长模子的复杂度,大概导致模子练习时间变长,以及在数据量不敷时容易发生过拟合。详细结果怎样,必要通过实验验证。
比方,假如原模子有一层卷积层,你可以实验在厥后增长另一层卷积层,同时思量利用更小的滤波器(比方 3x3)和符合的步长与添补,以保持输出尺寸稳固。增长的卷积层可以利用ReLU激活函数,以保持非线性。- conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1)
- conv2 = nn.Conv2d(out_channels, out_channels_next, kernel_size=3, stride=1, padding=1)
复制代码 在实际操纵中,必要监控 模子的练习和验证集性能,确保增长的复杂性带来了实际的性能提升。
2. 当前任务中为什么全毗连层是3277?每一个数字代表什么寄义?
在卷积神经网络中,全毗连层前的尺寸通常反映了特性图的巨细和深度。3277中的每个数字有其特定寄义:
- 32:代表特性图的深度(也就是上一层输出的通道数)。这通常是指在卷积层或池化层后,模子学习到的特性的数量。每个通道可以看作是模子学习到的某种特定特性的相应。
- 7 和 7:表现特性图的宽度和高度。这是颠末一系列卷积和池化操纵后,原始输入图像被降采样(或下采样)后的尺寸。
以范例的CNN架构为例,假设输入图像为224x224像素,利用一个7x7的卷积核,颠末两次最大池化(每次池化核巨细为2x2,步长为2),特性图的尺寸会从224x224降为56x56,再降为28x28,末了到14x14。假如在14x14的特性图上再利用卷积层,特性图的深度会增长,但宽度和高度保持稳固,直到末了被展平(flatten)成1D向量送入全毗连层。
因此,假如终极特性图的深度为32,而宽度和高度均为7,展平后的向量长度即为3277,这是在进入全毗连层前,模子对图像特性的终极表征。全毗连层将利用这些特性举行终极的分类决议。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |