网站开发兼职群,一键优化下载安装,wordpress左右滑动切换,建设信用网站的作用全文链接#xff1a;https://tecdat.cn/?p37134
原文出处#xff1a;拓端数据部落公众号
分析师#xff1a;Canglin Li
本文深入探讨了卷积层#xff08;Convolutional Layer#xff09;在深度学习框架中的核心作用与操作机制#xff0c;并分析了其在特征提取、网络构…
全文链接https://tecdat.cn/?p37134
原文出处拓端数据部落公众号
分析师Canglin Li
本文深入探讨了卷积层Convolutional Layer在深度学习框架中的核心作用与操作机制并分析了其在特征提取、网络构建以及性能提升方面的独特优势。此外本文还介绍了与卷积层紧密相关的激活函数、池化层以及ResNet深度神经网络的概念与应用并通过实验验证了ResNet在复杂数据集上的高效分类性能。本文将通过视频讲解展示ResNet原理并结合如何用 Python中VGG模型、自定义ResNet模型、Capsule Network模型分析MNIST数据集实例的代码数据为读者提供一套完整的实践数据分析流程。 1. 引言
在深度学习中卷积层作为构建卷积神经网络CNN的基本单元承担着从输入数据中提取并表征关键特征的重要任务。通过窗口滑动与滤波器计算两个关键操作卷积层能够逐层递进地提取从低级到高级的特征表示为后续的网络层提供丰富的信息基础。
2. 卷积层的基本原理
卷积层的核心在于卷积运算该运算通过自定义大小的卷积核滤波器在输入数据上滑动实现局部数据的加权求和。这一过程不仅模拟了生物视觉系统的处理机制还使得网络能够捕捉到输入数据的空间结构特征。值得注意的是随着网络层数的增加卷积层能够迭代地提取出更为复杂、高级的特征表示从而增强了网络的表征能力。 3. 激活函数与池化层
为了引入非线性因素并提升网络的泛化能力卷积层后通常会接入激活函数。常用的激活函数包括ReLU、tanh和sigmoid等它们各自具有不同的特性与适用范围。 此外为了降低特征维度并保留关键信息池化层Pooling Layer被广泛应用于卷积层之后。池化层通过将特征图划分为多个区域并取最大值或平均值来实现降维处理从而减小了计算量并增强了特征的鲁棒性。 4. ResNet深度神经网络
ResNet残差网络作为一种创新的深度神经网络架构在ImageNet等大规模图像识别竞赛中取得了显著的成绩。ResNet通过引入“shortcut connection”残差连接机制解决了深度神经网络训练中的梯度消失和梯度爆炸问题使得网络能够训练得更深且更稳定。本文详细分析了ResNet的网络结构特点及其在不同层数版本中的具体实现方式并强调了残差连接在保留原始特征和加速网络收敛方面的重要作用。 ResNet的网络结构图
伴随着深度神经网络的不断发展ResNet同样延伸出了不同的版本这里的版本指的是层数的不同各种版本的具体结构下如图所示。 由图可知各种ResNet的网络结构相差不大不论是18层、34层、50层、101层还是152层。在网络的开始都是一个77的卷积层然后是一个33的最大池化下采样然后按照途图中的conv2_x、conv3_x、 conv4_x、conv5_x中的残差结构。最后再跟一个平均池化下采样和全连接层sofmax作为输出。 COV2_x
这里需要注意conv3_x是3x3,128通道也就是说经过conv2_x后得到的56x5664通道到conv3_x里面升维了并且大小也变了变成28x28了这时候要注意一个问题分支与主分支的结果就无法相加了大小不一致维度不一致,这是需要使用一个分支(如右图所示)。 5. Batch Normalization
批量归一化Batch Normalization作为深度学习领域的一项重要技术通过对每一层网络的输入进行归一化处理来加速训练过程并提高模型性能。本文介绍了Batch Normalization的基本原理及其在ResNet中的实际应用位置即放在卷积层与激活层之间并强调了其对于缓解特征分布散乱问题、提升训练稳定性和收敛速度的重要作用。
真正的残差结构
建议将bn层放在卷积层(Conv)和激活层例如Relu)之间且卷积层不要使用偏置bias所以说我们实际上的残差网络块应该是如右图。 ResNet的优点
具体的优点如下: (1)可以训练非常深的神经网络避免了梯度消失问题提高了模型的表达能力和性能。 (2使用残差连接可以保留原始特征使得网络的学习更加顺畅和稳定进一步提高了模型的精度和泛化能力. (3训练时可以避免梯度消失和梯度爆炸问题加速网络收敛。
6.实例分析 本项目使用了分类难度较大的数据集notMNIST(部分数据如左图)在训练集、测试集以及验证集的选择方面本文在所有数据中随机选择50%作为训练集30%作为验证集剩下的20%作为测试集。 在参数设置层面利用sgdm作为训练算法最大迭代次数50次每次进行73回运算总运算3650次设置学习率为0.01。
实验结果
在如上叙述的条件下ResNet18对该数据集的分类结果如图所示。 ResNet18在该数据集上的分类准确率达94.00%分类效果较好。 Python中VGG模型、自定义ResNet模型、Capsule Network模型分析MNIST数据集
数据集归一化计算均值与标准差
在深度学习的数据预处理阶段归一化是一个至关重要的步骤它有助于提升模型的收敛速度和性能。归一化通常涉及计算数据集的均值mean和标准差standard deviation, std并将原始数据转换到具有零均值和单位标准差的范围内。以下代码段展示了如何对MNIST数据集进行归一化处理并打印出归一化所需的均值和标准差。
import numpy as np# 加载数据集
trn_data trn_data[arr_0] / 255 # 将像素值归一化到[0, 1]区间# 计算均值和标准差
data_mean trn_data.mean()
data_std trn_data.std()# 打印结果
print(fMean: {data_mean})
print(fStd: {data_std})# 接下来我们可以使用这些均值和标准差来归一化训练集和测试集以便后续模型的训练与评估。 模型加载与评估
在深度学习中模型的选择与加载是实验过程中的重要环节。以下部分展示了如何加载预训练的VGG模型、自定义ResNet模型、Capsule Network模型以及它们的集成模型并验证模型是否成功加载。
VGG模型
from fastai.vision.all import *# 假设databunch已正确定义并包含训练与验证数据
learn Learner(databunch, VGG(), metricsaccuracy)
learn.load(vgg_model_with_norm) # 加载预训练模型
print(Model was loaded) ResNet模型
# 假设MyResNet是基于ResNet的自定义模型BasicBlock为残差块类型
learn Learner(databunch, MyResNet(BasicBlock, [2, 2, 2, 2]), metricsaccuracy)
learn.load(resnet_model_with_norm) # 加载预训练模型
print(Model was loaded) VGG与ResNet-18的集成 集成模型通过结合多个单一模型的预测结果来提高整体性能。具体实现细节取决于集成策略但这里仅展示集成模型的加载示意。 Capsule Network模型 Capsule Network是一种较新的网络架构旨在通过胶囊capsules来捕捉数据的空间层次关系。
# 假设CapsNet和caps_accuracy, caps_loss已正确定义
learn Learner(databunch, CapsNet(), metricscaps_accuracy, loss_funccaps_loss)
learn.load(caps_net_model_with_norm) # 加载预训练模型
print(Model was loaded) VGG与Capsule Network的集成 集成VGG与Capsule Network的结果表明其性能可能不如VGG与ResNet的集成。这可能是由于不同模型架构之间的互补性差异所导致的。 learn Learner(databunch, VGG_Caps(), metricsvgg_caps_accuracy, loss_funcvgg_caps_loss)
vgg_capsnet_load_model(learn, vgg_model_with_norm, caps_net_model_with_norm) 关于分析师 这里感谢Canglin Li对本文做出的贡献。他是拓端的分析师在信息与计算科学领域拥有深厚背景熟练掌握多种编程语言和技术工具特别是在Matlab和Java方面展现出卓越的能力。他的专业领域广泛涉及深度学习等前沿技术。