CNN与常用框架

本文详细介绍了卷积神经网络(CNN)的层级结构,包括输入层、卷积层、ReLU激活层、池化层和全连接层,并讨论了CNN的优缺点。此外,还提及了典型的CNN模型,如LeNet、AlexNet和VGGNet,以及常用的CNN框架,如Caffe、Torch和TensorFlow。
七月在线 5月深度学习班课程笔记——No.4  

  这一节内容比较丰富。主要介绍神经网络的每一个层级结构,理清楚每一层可能影响结果的参数,再介绍CNN的常用框架。


1. 神经网络

1.1 神经网络——是什么?

  神经网络没有一个严格的正式定义。它的基本特点,是试图模仿大脑的神经元之间传递,处理信息的模式。还是有些抽象,那么看看下面这张图。
  这里写图片描述
  输入层和输出层之间有多个隐层hidden layer,输入层、输出层和隐层都有若干个节点。每一个节点是一个神经元,每个神经元,通过激励函数,计算处理来自其它相邻神经元的加权输入值;神经元之间的信息传递的强度,用所谓加权值来定义,算法会不断自我学习,调整这个加权值。
  在逻辑回归中,我们知道回归函数中得到线性拟合 z=θ0+θ1x1+θ2x2

卷积神经网络CNN常用的模型框架通常由多个关键组件构成,这些组件协同工作以实现图像识别、分类等任务。典型的 CNN 模型框架包括以下几个部分: ### 卷积层(Convolutional Layer) 卷积层是 CNN 的核心部分,负责从输入数据中提取特征。通过使用多个卷积核(滤波器),卷积层可以检测图像中的局部模式,如边缘、角点和纹理等[^1]。每个卷积核在输入数据上滑动,并计算输入数据的点积,生成一个特征图(Feature Map)。随着网络深度的增加,卷积核的数量也会增加,以便提取更复杂的特征。 ### 激活函数(Activation Function) 在卷积层之后,通常会应用一个非线性的激活函数,如 ReLU(Rectified Linear Unit),来引入非线性因素,使网络能够学习更复杂的特征表示。ReLU 函数定义为 $ f(x) = \max(0, x) $,它可以有效地解决梯度消失问题,并加速训练过程。 ### 池化层(Pooling Layer) 池化层用于降低特征图的空间尺寸(宽度和高度),从而减少参数数量和计算量,同时控制过拟合。最常见的池化方法是最大池化(Max Pooling),它通过选取局部区域的最大值来保留最重要的特征信息[^2]。例如,一个 2x2 的最大池化操作会将每个 2x2 区域内的最大值保留下来,输出一个新的、尺寸减半的特征图。 ### 全连接层(Fully Connected Layer) 在经过多层卷积和池化操作后,网络会将最后的特征图展平成一维向量,并输入到全连接层中。全连接层的作用是对提取的特征进行分类或回归。通常情况下,全连接层的最后一层会使用 Softmax 函数来进行多类别分类任务,输出每个类别的概率分布。 ### 批归一化层(Batch Normalization Layer) 批归一化层可以加速训练过程并提高模型的泛化能力。它通过对每一小批量数据进行标准化处理,使得网络对初始化更加鲁棒,并允许使用更大的学习率。 ### Dropout 层 Dropout 层是一种正则化技术,用于防止过拟合。在训练过程中,Dropout 层随机地忽略一部分神经元,迫使网络学习冗余的特征表示。这有助于提高模型在未见数据上的表现。 下面是一个简单的 CNN 模型框架示例,使用 PyTorch 实现: ```python import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 定义卷积层 self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, stride=1, padding=1) self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, stride=1, padding=1) # 定义池化层 self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0) # 定义批归一化层 self.bn1 = nn.BatchNorm2d(16) self.bn2 = nn.BatchNorm2d(32) # 定义全连接层 self.fc1 = nn.Linear(32 * 7 * 7, 128) self.fc2 = nn.Linear(128, 10) # 定义Dropout层 self.dropout = nn.Dropout(p=0.5) # 定义激活函数 self.relu = nn.ReLU() def forward(self, x): # 前向传播 x = self.pool(self.bn1(self.relu(self.conv1(x)))) x = self.pool(self.bn2(self.relu(self.conv2(x)))) # 展平特征图 x = x.view(-1, 32 * 7 * 7) # 应用Dropout x = self.dropout(self.relu(self.fc1(x))) # 输出层 x = self.fc2(x) return x ``` 以上代码展示了一个包含卷积层、池化层、批归一化层、全连接层和 Dropout 层的简单 CNN 模型框架。这种结构可以根据具体任务的需求进行调整,例如增加更多的卷积层或改变卷积核的大小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值