当前位置: 首页 > news >正文

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


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

👉有问题欢迎大家加关注私戳或者评论(包括但不限于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.lryc.cn/news/38345.html

相关文章:

  • 计算机组成原理_总线标准
  • 蓝桥杯C/C++VIP试题每日一练之芯片测试
  • 树莓派测试wifi与eth速率
  • 关系抽取方面的基础
  • 蓝桥杯嵌入式(G4系列):定时器捕获
  • 多态的定义、重写、原理
  • Angular 配置api代理 proxy 实践
  • ES: 数据增,删,改,批量操作
  • 伯努利方程示例 Python 计算(汽水流体和喷泉工程)
  • 2022年中职网络安全竞赛——应用服务漏洞扫描与利用解析(详细)
  • yyds,Elasticsearch Template自动化管理新索引创建
  • 蓝桥杯嵌入式ADC与DAC(都不需要中断)
  • 网络视频的防盗与破解
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(二)
  • 接口中新增方法,接口应用和适配器设计模式
  • 自主HttpServer实现(C++实战项目)
  • 第26篇:Java数组API总结
  • [C++] 信号
  • 单片机——矩阵按键模块
  • Android学习之网络操作
  • Delphi XE开发android开发环境搭建
  • flink入门-流处理
  • 【数据结构】单链表中,如何实现 将链表中所有结点的链接方向“原地”逆转
  • 摘花生(简单DP)
  • 2022济南大学acm新生赛题解
  • 策略模式教程
  • 什么是刺猬理念
  • RPC通信相关
  • Node.js + MongoDB 搭建博客 -- 登录页面
  • 互联网新理念,对于WEB 3.0 你怎么看?