从LeNet到ResNet:深入探索卷积神经网络

news2024/11/27 10:23:31

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

CNN

(封面图由ERNIE-ViLG AI 作画大模型生成)

从LeNet到ResNet:深入探索卷积神经网络

在计算机视觉领域,卷积神经网络(Convolutional Neural Network,简称CNN)已经成为了解决图像分类、物体检测等任务的主要算法之一。CNN最早由LeCun等人提出,经过多年的发展和优化,如今已经具有非常强大的能力和广泛的应用场景。本文将从历史角度出发,介绍CNN的发展过程,包括LeNet、AlexNet、VGG、Inception和ResNet等经典模型,并结合代码和实例,详细阐述其优劣势和原理,让读者深入了解CNN在计算机视觉中的应用。

1. CNN的起源

在1990年代初,LeCun等人提出了一种卷积神经网络——LeNet,它是一个由卷积层、池化层和全连接层组成的神经网络。这个网络最初是用来识别手写数字的。LeNet的结构如下图所示:
LeNet的特点是利用卷积运算和共享权值的思想来减少网络的参数数量,从而提高训练速度和泛化能力。LeNet在手写数字识别任务上取得了很好的效果,但是在面对复杂的图像分类问题时表现欠佳。随着计算机性能的提升和数据集的扩大,更深层次的神经网络逐渐成为了研究热点。

2. CNN的原理

卷积神经网络主要由卷积层、池化层、全连接层等组成。其中,卷积层是卷积神经网络的核心组件,它可以有效地提取图像的特征。具体来说,卷积层通过卷积运算来对输入图像进行特征提取。卷积神经网络中的池化层用于对特征图进行降维,从而减少模型的参数数量。通常使用的池化操作有最大池化和平均池化。最大池化是取池化窗口中的最大值作为输出,平均池化是取池化窗口中的平均值作为输出。全连接层则是将特征图展开成一维向量,然后使用全连接层进行分类。

3. 经典CNN模型

(1)AlexNet

AlexNet是由Alex Krizhevsky等人在2012年提出的一种深度卷积神经网络。它主要针对的是ImageNet这样的大规模图像分类数据集。AlexNet的结构如下图所示:
AlexNet具有以下几个特点:

  • 使用ReLU激活函数,加速模型训练速度;
  • 使用Dropout技术,减少模型的过拟合;
  • 使用GPU加速计算,提高训练速度。

(2)VGG

VGG是由Simonyan等人在2014年提出的一种深度卷积神经网络。它主要特点是使用了非常小的卷积核(3x3),并且网络层数很深。VGG的结构如下图所示:
VGG具有以下几个特点:

  • 使用小的卷积核
  • 采用了多个3x3的卷积层来替代一个较大的卷积层,从而增加了网络的深度;
  • 在网络的尾部使用了全连接层,进行最终的分类。

(3)Inception

Inception是由Google Brain团队在2014年提出的一种深度卷积神经网络。它的特点是使用了多个不同大小的卷积核,并且在每个卷积层中同时执行多个不同的卷积操作。Inception的结构如下图所示:
Inception具有以下几个特点:

  • 使用不同大小的卷积核,可以提取不同大小的特征;
  • 在每个卷积层中同时执行多个不同的卷积操作,可以增加网络的非线性性;
  • 使用1x1的卷积核进行降维,可以减少网络的参数数量。

(4)ResNet

ResNet是由何凯明等人在2015年提出的一种深度卷积神经网络。它的特点是采用了残差学习的思想,可以训练超过100层的深度卷积神经网络。ResNet的结构如下图所示:

ResNet的优势在于:

  • 使用残差学习的思想,可以训练超过100层的深度卷积神经网络,而不会出现梯度消失或爆炸的问题;
  • 采用了批标准化技术,可以加速模型的训练收敛;
  • 通过添加辅助分类器,可以进一步提高模型的泛化能力。

4. CNN的原理和优劣势

CNN具有以下优势:

  • 可以有效地提取图像的特征,对于图像分类、目标检测、人脸识别等任务效果优秀;
  • 卷积神经网络的参数共享可以减少模型的参数数量,从而减少过拟合的风险;
  • 可以使用GPU等硬件加速计算,使得训练速度更快。

但是,CNN也存在以下劣势:

  • 对于图像中的细节信息难以捕捉;
  • 对于图像中的噪声和干扰比较敏感;
  • 需要大量的数据集来进行训练,否则会出现过拟合的现象。

5. 代码案例

下面我们来看一个基于CNN的手写数字识别的代码案例。

import tensorflow as tf
from tensorflow import keras

# 加载手写数字数据集
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 对数据进行预处理
train_images = train_images / 255.0
test_images = test_images / 255.0

# 构建卷积神经网络
model = keras.Sequential([
    keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.Flatten(),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(train_images.reshape(-1, 28, 28, 1), train_labels, epochs=5)

# 评估模型
test_loss, test_acc = model.evaluate(test_images.reshape(-1, 28, 28, 1), test_labels, verbose=2)
print('\nTest accuracy:', test_acc)

代码中使用了TensorFlow框架来构建卷积神经网络,并使用手写数字数据集来进行训练和测试。卷积神经网络的结构包括了多个卷积层和池化层,以及全连接层。在模型编译和训练之后,我们对模型进行了评估,计算出了模型的准确度。

参考文献

[1] LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436-444.
[2] Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. Advances in neural information processing systems, 1097-1105.
[3] Simonyan, K., & Zisserman, A. (2014). Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556.
[4] Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep learning (Vol. 1). MIT press.
[5] Zhou, B., Khosla, A., Lapedriza, A., Oliva, A., & Torralba, A. (2016). Learning deep features for discriminative localization. Proceedings of the IEEE conference on computer vision and pattern recognition, 2921-2929.


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文解读15——LightGBM: A Highly Efficient Gradient Boosting Decision Tree

目录1、文章贡献2、直方图算法Histogram(减少分裂点)3、基于梯度的单边采样算法GOSS(减少样本量)4、互斥特征捆绑算法EFB(减少特征)在上篇中提到,XGBoost算法的局限是它在寻找最优分裂点算法中需…

AidLux AI应用案例悬赏选题 | 电路板表面瑕疵检测

AidLux AI 应用案例悬赏征集活动 AidLux AI 应用案例悬赏征集活动是AidLux推出的AI应用案例项目合作模式,悬赏选题将会持续更新。目前上新的选题涉及泛边缘、机器人、工业检测、车载等领域,内容涵盖智慧零售、智慧社区、智慧交通、智慧农业、智能家居等…

正点原子裸机开发之C语言点灯程序

一. 简介 本文针对 IMX6ULL 的裸机开发的(即不带Linux操作系统的开发)。 主要分两部分的工作: 1. 配置 C语言运行环境 2. C 语言编写及运行 二. 配置C语言运行环境 配置 C 语言运行环境的工作分 三部分。如下: 1. 设置…

Nginx配置实例-反向代理案例一

实现效果:使用nginx反向代理,访问 www.suke.com 直接跳转到本机地址127.0.0.1:8080 一、准备工作 Centos7 安装 Nginxhttps://liush.blog.csdn.net/article/details/125027693 1. 启动一个 tomcat Centos7安装JDK1.8https://liush.blog.csdn.net/arti…

YonBuilder 应用构建全新入门指南

用友开发者中心以 YonBuilder 低代码开发为核心,提供可视化 低代码 全代码的一站式开发能力,企业组织和个人开发者可实现业务应用的快速开发。YonBuilder 基于用友 BIP 强大的中台支撑能力,在元数据驱动和运行框架的统一模型架构下&#xf…

Ethercat学习-GD32以太网学习

文章目录1、GD32F4以太网简介2、以太网模框图简介3、以太网主要模块介绍SMI接口RMII接口与MII接口DMA控制器4、以太网配置流程5、其他1、GD32F4以太网简介 GD32F4系列以太网模块包含10/100Mbps以太网MAC,数据的收发都通过DMA进行操作,支持MII&#xff0…

一个C#开发的开源的快速启动工具

更多开源项目请查看:一个专注推荐.Net开源项目的榜单 平常计算机安装软件比较多、或者工作涉及的文件比较多,很多人都会直接放在桌面,一方面不安全,还不容易查找,这时候我们往往,都会放在其他硬盘内&#x…

springboot项目yml文件中${}的使用

作用 项目启动时可以灵活的通过修改环境变量来替换配置中的值,如果没有传该环境变量时,就是用默认值; 格式:${自定义参数名:默认值} 代码举例,已开启应用的端口号为例: server:port: ${SERVER_PORT:960…

AI+人类,实现高效网络安全

导语 聊天机器人和生成式人工智能(如 ChatGPT)突然成为主流让很多人感到担忧。很多人开始担忧,人工智能取代人的时代已经到来。 幸运的是,事实并非如此。 更有可能的情况是,人类将与 AI 合作创建工作角色的混合模型。…

Mercedes-Benz EDI需求分析

作为奔驰的仓储服务提供商,企业A需要借助EDI实现仓储流程的自动化。奔驰将车存放在企业A处,由企业A将货物提供给4S店。整体业务流程中将通过EDI系统来进行业务数据的传输,今天的文章主要从奔驰EDI需求概览以及EDI项目业务流程两方面展开介绍。…

646. 最长数对链——【Leetcode每日刷题】

646. 最长数对链 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i][lefti,righti]pairs[i] [left_i, right_i]pairs[i][lefti​,righti​] 且lefti<rightileft_i < right_ilefti​<righti​。 现在&#xff0c;我们定义一种 跟随 关系&#xff…

MySQL查询索引原则

文章目录 等值匹配原则最左前缀匹配原则范围查找规则等值匹配+范围查找Order By + limit 优化分组查询优化总结MySQL 是如何帮我们维护非主键索引的等值匹配原则 我们现在已经知道了如果是【主键索引】,在插入数据的时候是根据主键的顺序依次往后排列的,一个数据页不够就会分…

保姆级使用PyTorch训练与评估自己的MobileViT网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址&#xff1a;https://github.com/Fafa-DL/Awesome-Backbones 操作教程&#xff1a;https://www.bilibili.co…

2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建

去年公司由于不断发展&#xff0c;内部自研系统越来越多&#xff0c;所以后来搭建了一个日志收集平台&#xff0c;并将日志收集功能以二方包形式引入自研系统&#xff0c;避免每个自研系统都要建立一套自己的日志模块&#xff0c;节约了开发时间&#xff0c;管理起来也更加容易…

【UE4 RTS游戏】07-控件蓝图显示当前游戏时间

效果步骤新建一个文件夹&#xff0c;命名为“Interfaces”&#xff0c;在该文件夹内新建一个蓝图接口&#xff0c;命名为“I_HUD”打开“Interfaces”&#xff0c;默认的函数名改为“SetClock”&#xff0c;添加一个输入&#xff0c;命名为“Time”&#xff0c;整数数组类型。添…

一套Java语言的云HIS医院信息管理系统SaaS源码

这是一套优秀的云His医院管理系统&#xff0c;它区别于普通的HIS系统&#xff0c;它通过云端管理整个HIS业务 一、HIS使用技术框架&#xff1a;自主研发&#xff0c;系统完全开源。 1、前端&#xff1a;AngularNginx 2、后台&#xff1a;JavaSpring&#xff0c;SpringBoot&…

AidLux AI 应用案例悬赏选题|行车安全辅助

AidLux AI 应用案例悬赏征集活动 AidLux AI 应用案例悬赏征集活动是AidLux推出的AI应用案例项目合作模式&#xff0c;悬赏选题将会持续更新。目前上新的选题涉及泛边缘、机器人、工业检测、车载等领域&#xff0c;内容涵盖智慧零售、智慧社区、智慧交通、智慧农业、智能家居等…

YOLOv5中添加SE模块详解——原理+代码

目录一、SENet1. 设计原理2. SE Block2.1 Squeeze:Global Information Embedding2.2 Excitation:Adaptive Recalibration3. SE-Inception and SE-ResNet二、YOLOv5中添加SENet1.修改common.py2.修改yolo.py3.修改yolov5s.yaml参考文章一、SENet 论文地址&#xff1a;Squeeze-a…

UI设计 ,这7个网站,真的太好用了。

下面这几个UI设计网站&#xff0c;设计师们一定要收藏起来&#xff0c;每天坚持浏览这些网站&#xff0c;可以快速的提升你的UI设计水平。 1、菜鸟图库 https://www.sucai999.com/searchlist/UIsheji----all-0-0.html?vNTYxMjky 菜鸟图库提供了超多免费设计素材&#xff0c;在…

logistic回归的参数梯度更新方法的个人理解

logistic回归参数更新看了几篇博文&#xff0c;感觉理解不透彻&#xff0c;所以自己写一下&#xff0c;希望能有更深的理解。logistic回归输入是一个线性函数Wxb\boldsymbol{W}\boldsymbol{x}\boldsymbol{b}Wxb&#xff0c;为了简单理解&#xff0c;考虑batchsize为1的情况。这…