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

卷积神经网络(CNN)详细介绍及其原理详解

卷积神经网络(Convolutional Neural Networks,简称CNN)是深度学习中非常重要的一类神经网络,主要用于图像识别、图像分类、物体检测等计算机视觉任务。本文将详细介绍卷积神经网络的基本概念、结构组成及其工作原理,并通过具体的例子和图示帮助读者理解。

一、卷积神经网络的基本概念

1.1 卷积层(Convolutional Layer)

卷积层是CNN的核心组件,通过卷积运算提取输入数据的特征。卷积运算使用多个卷积核(滤波器)对输入图像进行滑动,计算每个局部区域的加权和,生成特征图(Feature Map)。

例子:

假设输入图像为一个5x5的灰度图像,卷积核为一个3x3的矩阵,步幅(stride)为1,不使用填充(padding)。卷积运算如下图所示:

输入图像:
1 0 1 2 1
0 1 0 2 0
1 1 1 0 0
2 2 0 1 1
1 0 0 2 2卷积核:
1 0 -1
1 0 -1
1 0 -1输出特征图:
0 -3 -4
1 -2 -3
4 1 -1

1.2 池化层(Pooling Layer)

池化层用于对特征图进行降维,减少计算量,防止过拟合。常见的池化方式有最大池化(Max Pooling)和平均池化(Average Pooling)。

例子:

假设输入特征图为4x4的矩阵,使用2x2的池化窗口和步幅为2的最大池化操作:

输入特征图:
1 3 2 4
5 6 1 2
1 2 0 1
4 5 2 3最大池化后输出特征图:
6 4
5 3

1.3 全连接层(Fully Connected Layer)

全连接层将池化层的输出展平(flatten),并连接到一个或多个全连接神经网络,用于输出分类结果。

二、卷积神经网络的结构组成

典型的卷积神经网络结构包含以下几部分:

  1. 输入层(Input Layer):输入原始数据,如图像。
  2. 卷积层(Convolutional Layer):提取局部特征。
  3. 池化层(Pooling Layer):降维,保留主要特征。
  4. 全连接层(Fully Connected Layer):进行最终的分类或回归任务。
  5. 输出层(Output Layer):输出结果,如分类标签。、

三、卷积神经网络的工作原理

3.1 卷积运算

卷积运算是卷积神经网络的核心,通过卷积核与输入数据进行逐元素相乘并求和,生成特征图。其公式如下:

3.2 激活函数

激活函数引入非线性变换,使神经网络能够拟合复杂的模型。常用的激活函数有ReLU(Rectified Linear Unit),其公式为:

ReLU(x) = \max(0, x) ``` 下图展示了ReLU函数的图示: ![ReLU函数图示](https://example.com/relu-function.png)

3.3 损失函数和优化器

损失函数用于衡量模型预测值与真实值之间的差距,常用的损失函数有交叉熵损失(Cross-Entropy Loss)。优化器用于更新模型参数,常用的优化器有SGD(随机梯度下降)和Adam。 ##

四、卷积神经网络的实例

为了更好地理解CNN,我们通过一个实例进行说明。假设我们要对MNIST数据集(手写数字)进行分类任务,使用简单的CNN模型实现。

import tensorflow as tf
from tensorflow.keras import layers, models# 构建模型
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 加载数据
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc}")

五、总结

卷积神经网络通过卷积层和池化层提取输入数据的特征,并通过全连接层进行分类或回归任务。其结构和工作原理使其在图像识别和计算机视觉领域表现出色。希望本文的详细介绍和实例能帮助读者更好地理解CNN的原理和应用。

相关文章:

  • 力扣279. 完全平方数
  • 赶紧收藏!2024 年最常见 20道 Redis面试题(四)
  • 《Python编程从入门到实践》day37
  • 小林coding笔记
  • 英语学习笔记24——Give me/us/him/her/them some ...
  • 5.23小结
  • 【vue-3】动态属性绑定v-bind
  • JPHS-JMIR Public Health and Surveillance
  • Java设计模式-中介者模式(20)
  • SpringBoot前置知识02-spring注解发展史
  • 【js刷题:数据结构链表之环形链表】
  • LitCTF
  • Unity Render入门
  • cuda 内核启动
  • 前端基础入门三大核心之HTML篇:探索WebAssembly —— 开启网页高性能应用新时代
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android单元测试 - 几个重要问题
  • ECMAScript入门(七)--Module语法
  • Java IO学习笔记一
  • Java知识点总结(JavaIO-打印流)
  • Kibana配置logstash,报表一体化
  • spring cloud gateway 源码解析(4)跨域问题处理
  • tensorflow学习笔记3——MNIST应用篇
  • uva 10370 Above Average
  • Vue2 SSR 的优化之旅
  • 从零开始的无人驾驶 1
  • 分享几个不错的工具
  • 后端_ThinkPHP5
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端面试题总结
  • 巧用 TypeScript (一)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 第二十章:异步和文件I/O.(二十三)
  • 正则表达式-基础知识Review
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #window11设置系统变量#
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax,axios,fetch三种ajax请求的区别
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)网络优化与超参数选择--九五小庞
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 8.0 中有哪些新的变化?
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net项目IIS、VS 附加进程调试
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [20171113]修改表结构删除列相关问题4.txt