详解卷积神经网络(Convolutional Neural Networks, CNNs)

全连接神经网络基础

全连接神经网络(Fully Connected Neural Network 或 Multi-Layer Perceptron, MLP)是最简单的深度学习模型之一。一个典型的全连接网络由多个层组成,每一层包含多个神经元或节点。每个神经元与上一层的所有神经元相连,并通过激活函数产生输出。

全连接网络的每一层都执行以下操作:

  1. 接收来自上一层(或输入层)的输入。
  2. 将输入与该层的权重进行矩阵相乘。
  3. 加上一定的偏置项。
  4. 通过激活函数生成激活值。

在传统的全连接网络中,最常见的激活函数是Sigmoid、Tanh、ReLU等。

为什么全连接神经网络是卷积神经网络的基础?

全连接神经网络是理解复杂网络结构的基础。它教会我们如何堆叠层,如何通过反向传播调整权重,以及如何利用激活函数引入非线性。这些基础概念在卷积神经网络中同样适用。

卷积神经网络(Convolutional Neural Networks, CNNs)

卷积神经网络是专门用来处理具有网格结构输入的神经网络,例如图像(2D网格),声音信号(1D网格)等。CNN通过引入卷积层显著减少了模型参数的数量,并能够学习输入数据的局部特征。

卷积层 (Convolutional Layer)

卷积层通过一组可学习的卷积核(也称为过滤器或特征检测器)来提取特征。每个卷积核在输入图像上滑动(或卷积操作),并生成特征图(也称为激活图)。这允许网络专注于图像的局部信息,并且具有平移不变性。

池化层(Pooling Layer)

池化层通常位于连续的卷积层之间,用于降低特征图的空间维度,增强网络对小的变化的不变性,并减少计算量。最常见的池化操作是最大池化,它从覆盖的区域中提取最大值。

全连接层(Fully Connected Layer)

全连接层通常位于CNN的末尾,它们的作用是将前面卷积层和池化层学习到的局部特征组合起来完成特定的任务,比如分类。

激活函数

像全连接网络一样,CNN的卷积层和全连接层之后也会跟有激活函数,ReLU是现代CNNs中最常用的激活函数之一,因为它能够加速训练且防止梯度消失问题。

使用PyTorch搭建卷积神经网络

PyTorch是一个流行的开源机器学习库,尤其在研究领域受到青睐。下面是一个使用PyTorch搭建简单卷积神经网络的示例代码,带有详细的中文注释:

import torch
import torch.nn as nn
import torch.nn.functional as F# 定义CNN模型的类
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()# 卷积层1,使用了32个3x3的卷积核self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)# 卷积层2,使用了64个3x3的卷积核self.conv2 = nn.Conv2d(32, 64, 3, padding=1)# 最大池化层,使用了2x2的池化窗口self.pool = nn.MaxPool2d(kernel_size=2, stride=2)# 全连接层1,输入特征数量必须与前一层的输出相匹配# 这里的输入特征数量视乎前面层数和池化后的结果而定self.fc1 = nn.Linear(64 * 7 * 7, 128)# 全连接层2,用作输出层,假设我们要分类10个类别self.fc2 = nn.Linear(128, 10)# 定义前向传播路径def forward(self, x):# 经过第一个卷积层后使用ReLU激活函数x = F.relu(self.conv1(x))# 经过最大池化层x = self.pool(x)# 经过第二个卷积层后使用ReLU激活函数x = F.relu(self.conv2(x))# 经过最大池化层x = self.pool(x)# 将多维数据展平为一维,准备输入全连接层x = x.view(-1, 64 * 7 * 7)# 经过第一个全连接层后使用ReLU激活函数x = F.relu(self.fc1(x))# 经过输出层,并不使用激活函数,因为这里输出的是分类结果x = self.fc2(x)return x# 创建模型实例
model = SimpleCNN()# 打印模型结构
print(model)

以上代码中,我们构建了一个简单的卷积神经网络,它有2个卷积层,2个池化层以及完全连接的层。在实践中,您可能需要根据输入数据的大小和目标任务调整网络的大小和复杂性。例如,如果您处理的是更高分辨率的图像,您可能需要更多的卷积层或者更大的全连接层。

请注意,在实际应用中搭建CNN时,计算输入特征数量给全连接层是一个重要步骤,需要根据您的输入数据和之前层的设置来手动计算。例如,在上面的代码中,逻辑是假设输入的图像大小是28x28像素,经过两次2x2的池化后,其大小变为7x7像素(原大小除以池化窗口stride的大小的平方),因此在全连接层fc1中的输入特征数量必须设置为64(第二个卷积层的输出通道数)乘以7乘以7(池化后的图像大小)。

如果你想更深入地了解人工智能的其他方面,比如机器学习、深度学习、自然语言处理等等,也可以点击这个链接,我按照如下图所示的学习路线为大家整理了100多G的学习资源,基本涵盖了人工智能学习的所有内容,包括了目前人工智能领域最新顶会论文合集和丰富详细的项目实战资料,可以帮助你入门和进阶。

链接: 人工智能交流群【最新顶会与项目实战】(点击跳转)

在这里插入图片描述

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

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

相关文章

论文阅读[2022sigcomm]GSO-Simulcast Global Stream Orchestration in Simulcast Video

GSO-Simulcast Global Stream Orchestration in Simulcast Video 作者: 1 背景 1视频会议成为全球数十亿人远程协作、学习和个人互动的核心,这些不断增长的虚拟连接需求推动视频会议服务的蓬勃发展 2当前用户越来越希望在低延迟下看到更高质量的视频…

Milvus 再上新!支持 Upsert、Kafka Connector、集成 Airbyte,助力高效数据流处理

Milvus 已支持 Upsert、 Kafka Connector、Airbyte! 在上周的文章中《登陆 Azure、发布新版本……Zilliz 昨夜今晨发生了什么?》,我们已经透露过 Milvus(Zilliz Cloud)为提高数据流处理效率, 先后支持了 Up…

C语言碎片知识

sizeof 1.sizeof是C语言中的一个操作符,同时也是关键字!!!! 2.sizeof的操作数可以是类型,变量或表达式 如图,第一个为什么是6?,因为先计算了3的大小,占4个字…

GAN:SNGAN-谱归一化GANs

论文:https://arxiv.org/pdf/1802.05957.pdf 代码:GitHub - pfnet-research/sngan_projection: GANs with spectral normalization and projection discriminator 发表:2018 ICLR 摘要 GANs的主要挑战是:训练的稳定性。本文作…

java 之 继承与多态的详细介绍

文章目录 类的继承1. 基本语法2. 继承的特点3. 方法的重写(方法的覆盖)super 关键字1. 调用父类的构造器2. 访问父类的成员变量3. 调用父类的方法4. 在构造器中调用父类方法封装性以及访问修饰符抽象方法1. 声明抽象类2. 抽象方法3. 继承抽象类4. 抽象类…

智能指针及强相关知识经验总结 --- 移动语义、引用计数、循环引用、move()、自定义删除器等

目录 前言 一、shared_ptr 1. 基本用法和构造方法 2. 引用计数机制 3. weak_ptr 解决循环引用 二、unique_ptr 1. 基本用法和构造方法 2. 独占性 3. 所有权转移 1)unique_ptr :: release() 2)移动语义 和 move() 三、 对比 shared_ptr 和 un…

Linux中项目部署步骤

安装jdk,tomcat 安装步骤 1,将压缩包,拷贝到虚拟机中。 通过工具,将文件直接拖到虚拟机的/home下 2,回到虚拟机中,查看/home下,有两个压缩文件 3,给压缩文件做解压缩操作 tar -z…

Hive数据倾斜之:数据类型不一致导致的笛卡尔积

Hive数据倾斜之:数据类型不一致导致的笛卡尔积 目录 Hive数据倾斜之:数据类型不一致导致的笛卡尔积一、问题描述二、原因分析三、精度损失四、问题解决 一、问题描述 如果两张表的jion,关联键分布较均匀,没有明显的热点问题&…

计算机基础知识64

ForeignKey属性 to:设置要关联的表 related_name: 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’ related_query_name:反向查询操作时,使用的连接前缀,用于替换表名 to_field:设置要关联的表…

最长连续序列(leetcode 128)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:排序方法二:哈希表 5.实现示例参考文献 1.问题描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你…

【华为OD题库-049】评论转换输出-java

题目 在一个博客网站上,每篇博客都有评论。每一条评论都是一个非空英文字母字符串。评论具有树状结构,除了根评论外,每个评论都有一个父评论。 当评论保存时,使用以下格式: 首先是评论的内容; 然后是回复当前评论的数量。 最后是当…

如何保持操纵机构丝杆的精度?

滚珠丝杆是操纵机构中的重要组成部分,可以传递较高的扭矩,并且具有低摩擦、高效率和快速响应的特性,这使得操纵机构能够实现高速、高精度的运动控制,这对于整个系统的性能和精度具有决定性的影响,保持操纵机构丝杆的精…

互联网Java工程师面试题·Spring Boot篇·第二弹

目录 8、什么是 YAML? 9、如何实现 Spring Boot 应用程序的安全性? 10、如何集成 Spring Boot 和 ActiveMQ? 11、如何使用 Spring Boot 实现分页和排序? 12、什么是 Swagger?你用 Spring Boot 实现了它吗? …

YoloV5改进策略:Swift Parameter-free Attention,无参注意力机制,超分模型的完美迁移

摘要 https://arxiv.org/pdf/2311.12770.pdf https://github.com/hongyuanyu/SPAN SPAN是一种超分网络模型。SPAN模型通过使用参数自由的注意力机制来提高SISR的性能。这种注意力机制能够增强重要信息并减少冗余,从而在图像超分辨率过程中提高图像质量。 具体来说,SPAN模…

【wvp】测试记录

ffmpeg 这是个莫名其妙的报错,通过排查,应该是zlm哪个进程引起的 会议室的性能 网络IO也就20M

全志T527设置gpio口输出高电平实际输出低电平

前言 在调试T527的时候,主板另外添加了gpio口去控制usb口的电源开关,软件上面需要在内核运行的时候将gpio口设置输出高电平,usb口才可以正常使用。改好系统固件后,升级发现,机器开机动画过程中可以控制gpio口去打开us…

ArkUI组件--Button组件

1.声明Button组件 Button(label?:ResourceStr) #label是按钮上显示的文本 ①label是文字类型 所写文字会在按钮上显示 ②不输入label内容,需要额外定义一些描述。例如插入图片(需要定义图片属性) Button(){Image($r(app.media.xxx)).wi…

【题目】栈和队列专题

文章目录 专题一:栈系列1. 中缀表达式转后缀表达式(逆波兰式)2. 有效的括号3. 用栈实现队列4. 最小栈 专题一:栈系列 1. 中缀表达式转后缀表达式(逆波兰式) 算法原理 2. 有效的括号 题目链接 算法原理 代…

SpringBoot-监听Nacos动态修改日志级别

目录 一、pom文件 二、项目配置文件 三、日志配置文件 四、日志监听类 五、日志动态修改服务类 线上系统的日志级别一般都是 INFO 级别,有时候需要查看 WARN 级别的日志,所以需要动态修改日志级别。微服务项目中使用 Nacos 作为注册中心&#xff0c…

C++面试宝典第2题:逆序输出整数

题目 写一个方法,将一个整数逆序打印输出到控制台。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如:123的逆序输出为321,8600的逆序输出为68,-609的逆序输出为-906。 解析 这道题本身并没有什么…