人工智能:CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的知识梳理

卷积神经网络(CNN)

卷积神经网络(CNN),也被称为ConvNets或Convolutional Neural Networks,是一种深度学习神经网络架构,主要用于处理和分析具有网格状结构的数据,特别是图像和视频数据。CNN 在计算机视觉任务中表现出色,因为它们能够有效地捕获和识别图像中的特征,具有平移不变性(translation invariance)。

CNN的关键特征包括:

  1. 卷积层(Convolutional Layers):这些层使用卷积操作来扫描输入图像,从中提取局部特征。卷积操作是通过在输入数据上滑动一个小窗口(称为卷积核)来实现的,窗口的权重在整个输入上共享,这有助于减少网络的参数数量。

  2. 池化层(Pooling Layers):池化层用于减小特征图的尺寸,减少计算负担,并提高网络的平移不变性。常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。

  3. 激活函数:通常,CNN中的每个神经元都会应用一个激活函数,如ReLU(Rectified Linear Unit),以引入非线性特性,使网络能够学习更复杂的模式。
    ReLU(Rectified Linear Unit)激活函数
    在这里插入图片描述
    ReLU函数在正数范围内返回输入值,对于负数则返回零。它是目前最常用的激活函数,因为它简单并且在许多情况下能够提供很好的性能。ReLU的一个主要优点是它在前向传播过程中不会引起梯度消失问题。
    Sigmoid激活函数
    在这里插入图片描述
    Sigmoid函数将输入映射到0到1的范围内。它在二分类问题的输出层上常常被使用,因为它可以把输出解释为概率值。但是,在深度网络中,它容易引起梯度消失问题,因此在深层网络中使用相对较少。
    Tanh激活函数
    在这里插入图片描述
    Tanh函数将输入映射到-1到1的范围内。与Sigmoid相比,Tanh的输出范围更大,均值接近于零,有时在某些网络层中会有所用。
    Leaky ReLU激活函数
    在这里插入图片描述
    其中,α 是一个小的正数,通常取0.01。Leaky ReLU允许小于零的输入值有一个小的梯度,从而避免了ReLU中可能出现的“神经元死亡”问题。
    Softmax激活函数
    Softmax函数通常用于多分类问题的输出层。它将一组数值映射到一个概率分布。给定一个具有 K个输出的向量,Softmax函数将每个输出变换为介于0到1之间的概率值,所有输出的和为1。

  4. 全连接层(Fully Connected Layers):通常在CNN的顶部添加全连接层,用于将高级特征映射到输出类别或标签。这些层的输出通常经过softmax函数,以生成类别概率分布。

  5. 权重共享:CNN的卷积层中采用权重共享,这意味着卷积核在整个输入上是共享的。这减少了参数数量,使网络更容易训练,并能够捕获输入数据的局部特征。

CNN广泛应用于图像分类、物体检测、人脸识别、语义分割、图像生成等计算机视觉任务。通过堆叠多个卷积层和池化层,可以构建深层的CNN模型,如VGG、ResNet和Inception,这些模型在各种图像处理任务中取得了卓越的性能。

示例
要构建一个卷积神经网络(CNN)来识别猫的图像,你需要使用深度学习框架,如TensorFlow或PyTorch,并准备一个包含猫图像的数据集。
以下是一个简化的Python示例代码,演示了如何使用TensorFlow来构建一个CNN模型,用于猫图像的分类任务。在实际项目中,你需要更大规模的数据集和更复杂的模型来实现更好的性能。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 构建卷积神经网络模型
model = keras.Sequential([# 卷积层1layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)),layers.MaxPooling2D((2, 2)),# 卷积层2layers.Conv2D(64, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),# 卷积层3layers.Conv2D(128, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),# 全连接层layers.Flatten(),layers.Dense(128, activation='relu'),layers.Dense(1, activation='sigmoid')  # 二分类,输出一个0到1的概率值
])# 编译模型
model.compile(optimizer='adam',loss='binary_crossentropy',  # 二分类交叉熵损失函数metrics=['accuracy'])# 加载猫图像数据集并进行预处理
# 在这里,你需要准备一个训练集和一个测试集,并进行数据预处理,包括图像大小调整、归一化等操作# 训练模型
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))# 评估模型性能
test_loss, test_acc = model.evaluate(test_images, test_labels)
print("Test accuracy:", test_acc)# 使用模型进行预测
predictions = model.predict(new_images)

上述代码是一个简化的示例,实际项目中需要更多的数据预处理、数据增强、超参数调整等步骤来提高模型性能。另外,你需要提供一个包含猫和非猫图像的数据集,并在代码中加载和使用这个数据集。

循环神经网络 (RNN)

循环神经网络(Recurrent Neural Network,简称RNN)是一种神经网络架构,用于处理序列数据和具有时间相关性的数据。RNN的关键特点是在网络中引入循环连接,允许信息在不同时间步之间传递,从而使其能够捕捉到时间依赖关系。

RNN中的主要组件和概念包括:

  1. 循环结构:RNN的核心特征是其循环结构。在每个时间步,RNN接收输入和前一个时间步的隐藏状态,然后产生新的隐藏状态。这个新的隐藏状态包含了前一个时间步的信息,使网络能够保持对序列中的先前信息的记忆。

  2. 隐藏状态:RNN的隐藏状态是网络在不同时间步之间的内部表示,它包含了过去时间步的信息。隐藏状态在网络的不同层次中传递,允许网络捕捉到时间相关性。

  3. 输入序列:RNN可以处理变长的输入序列,这使其非常适合自然语言处理(NLP)任务,例如文本生成、文本分类、语言建模等。输入序列可以是单词、字符或任何其他离散的标记。

  4. 输出序列:根据任务的不同,RNN可以生成输出序列,例如生成翻译的句子、音乐序列或时间序列预测。

  5. 门控循环单元 (GRU) 和 长短时记忆网络 (LSTM):传统的RNN容易受到梯度消失和梯度爆炸的问题。为了解决这个问题,引入了带有门控机制的改进型RNN,如GRU和LSTM。它们能够更好地处理长序列数据,学习长期依赖关系。

RNN广泛应用于各种序列建模任务,包括文本生成、语音识别、机器翻译、时间序列预测、手写识别等领域。然而,传统的RNN在处理长序列时仍然存在一些限制,如梯度问题和难以捕获长期依赖关系的问题。因此,近年来,更高级的模型,如Transformer模型,已经取代了RNN在某些任务中的地位。

循环神经网络(RNN)在许多领域和任务中都有广泛的应用,因为它们能够处理序列数据和具有时间相关性的数据。以下是一些使用RNN的处理案例示例:

  1. 自然语言处理 (NLP):

    • 文本分类:RNN可用于将文本分类为不同的类别,如垃圾邮件检测、情感分析、新闻分类等。
    • 语言建模:RNN可以用于训练语言模型,以生成连贯的文本或预测下一个词。
    • 机器翻译:RNN的变体,如序列到序列模型,用于将一种语言翻译成另一种语言。
    • 命名实体识别:用于从文本中识别出人名、地名、组织名等信息。
  2. 语音识别:

    • RNN用于将语音信号转化为文本,通常是在自动语音识别(ASR)任务中。
    • 音乐生成:RNN可以用于生成音乐序列,包括音符和节奏。
  3. 时间序列分析:

    • 股票价格预测:RNN可用于分析历史股票价格数据,以预测未来价格趋势。
    • 天气预测:RNN可以处理气象数据,以进行天气预测。
    • 生态学研究:用于分析环境数据,如气温、湿度、降雨等。
  4. 推荐系统:

    • RNN可以用于构建个性化推荐系统,根据用户历史行为和兴趣,推荐产品、电影、音乐等。
  5. 图像描述生成:

    • RNN与卷积神经网络(CNN)结合使用,用于生成图像描述,给出一张图片生成描述性文本。
  6. 手写识别:

    • RNN可用于将手写文本转换成机器可读的文本,如手写数字识别或手写汉字识别。
  7. 情感分析:

    • RNN可用于分析文本、评论或社交媒体帖子中的情感,以判断用户的情感状态。

随着时间的推移,深度学习模型的发展,如长短时记忆网络(LSTM)和门控循环单元(GRU),以及更先进的模型,如Transformer,已经在某些任务中取代了传统的RNN。

示例
以下是一个使用Python和TensorFlow库构建简单RNN模型的示例代码,该模型用于时序数据预测。

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 创建一个简单的时间序列数据
data = np.array([i for i in range(100)], dtype=np.float32)
target = data + 5  # 假设我们要预测时间序列上的线性增长# 数据预处理
sequence_length = 10  # 每个输入序列的长度
X, y = [], []for i in range(len(data) - sequence_length):X.append(data[i:i+sequence_length])y.append(target[i+sequence_length])X = np.array(X)
y = np.array(y)# 划分训练集和测试集
train_size = int(len(data) * 0.80)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]# 创建RNN模型
model = keras.Sequential([layers.SimpleRNN(units=64, activation='relu', input_shape=(sequence_length, 1)),layers.Dense(1)  # 输出层
])# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=16)# 评估模型
test_loss = model.evaluate(X_test, y_test)
print("Test loss:", test_loss)# 使用模型进行预测
predictions = model.predict(X_test)# 打印预测结果
print("Predictions:", predictions)

上述代码演示了一个简单的RNN模型,用于预测一个时间序列的下一个值。在实际应用中,你需要更复杂的数据和模型,但这个示例可以帮助你理解如何构建和训练RNN模型。

深度神经网络 (DNN)

区别

卷积神经网络 (CNN),循环神经网络 (RNN),和深度神经网络 (DNN) 都是深度学习领域中的神经网络架构,它们各自有不同的特点和应用。以下是它们的主要区别:

  1. 拓扑结构:
    • CNN:卷积神经网络主要用于处理图像数据,其核心组件是卷积层,用于检测图像中的特征,例如边缘、纹理和形状。
    • RNN:循环神经网络主要用于序列数据,例如文本或时间序列数据。RNN具有循环结构,可以捕捉序列中的上下文信息。
    • DNN:深度神经网络通常是多层的前深度神经网络(Deep Neural Network,DNN)是一种人工神经网络(Artificial Neural Network,ANN)的变体,其主要特点是具有多个隐藏层,允许网络学习多层次的特征表示。DNN通常由输入层、多个隐藏层和输出层组成,每个隐藏层包含多个神经元或节点。这些隐藏层的存在使得网络能够处理复杂的非线性关系,从而在各种任务中取得出色的性能。

以下是关于DNN的核心概念:

  1. 多层结构:DNN包括多个隐藏层,通常由前向连接构成。每个隐藏层都学习不同层次的特征表示,逐渐从低级特征到高级特征。

  2. 前向传播:数据从输入层开始,经过每个隐藏层传播到输出层。在前向传播过程中,每个神经元将输入进行加权求和,并应用一个激活函数,生成神经元的输出。

  3. 权重和偏差:每个连接都有一个相关联的权重,用于调整输入的影响程度。此外,每个神经元都有一个偏差(bias),用于调整激活函数的输出。

  4. 非线性激活函数:每个神经元通常都应用一个非线性激活函数,如ReLU(Rectified Linear Unit)或Sigmoid,以引入非线性特性,使网络能够建模更复杂的函数。

  5. 反向传播:DNN通过反向传播算法来学习权重和偏差的参数,以最小化损失函数。反向传播计算损失函数的梯度,并使用梯度下降或其变种来更新权重和偏差,使预测结果逼近真实标签。

  6. 深度学习框架:构建和训练DNN通常需要使用深度学习框架,如TensorFlow、PyTorch、Keras等。这些框架提供了高级API,简化了模型构建、训练和部署的过程。

DNN广泛应用于各种机器学习和深度学习任务,包括图像分类、物体检测、语音识别、自然语言处理、推荐系统、游戏AI等。DNN的成功部分来自于其深层结构,允许它们学习到多层次的特征表示,从而在大规模数据集上取得卓越的性能。馈神经网络,适用于各种任务,包括图像分类、语音识别和自然语言处理。

  1. 数据类型:

    • CNN:适用于处理二维图像数据,但也可以用于处理三维数据,如视频。
    • RNN:适用于处理序列数据,可以处理可变长度的序列。
    • DNN:可以处理各种类型的数据,通常用于结构化数据和非序列性数据。
  2. 参数共享:

    • CNN:卷积层具有参数共享机制,这有助于减少模型的参数数量,同时保留对图像中相同特征的位置不变性。
    • RNN:RNN层在时间步之间共享权重,用于处理序列数据中的先后关系。
    • DNN:DNN层没有参数共享,每个神经元都有独立的权重。
  3. 应用领域:

    • CNN:主要用于计算机视觉任务,如图像分类、目标检测和图像分割。
    • RNN:常用于自然语言处理 (NLP)、语音识别和时间序列分析。
    • DNN:适用于各种任务,包括传统的机器学习问题和深度学习任务。
  4. 层次结构:

    • CNN 和 RNN 可以被组合成深度神经网络 (DNN) 的一部分,用于构建复杂的深度学习模型。

CNN 主要用于处理图像数据,RNN 用于处理序列数据,而 DNN 是一个通用的深度神经网络架构,可以应用于各种不同类型的数据。这些神经网络架构也可以结合使用,以解决复杂的多模态问题。

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

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

相关文章

CSS中 通过自定义属性(变量)动态修改元素样式(以 el-input 为例)

传送门:CSS中 自定义属性(变量)详解 1. 需求及解决方案 需求:通常我们动态修改 div 元素的样式,使用 :style 和 :class 即可;但想要动态修改 如:Element-ui 中输入框(input&#x…

Windows与Linux服务器互传文件

使用winscp实现图形化拖动的方式互传文件. 1.下载winscp软件并安装,官方地址: https://winscp.net/eng/index.php 2.打开软件: 文件协议选择scp,输入linux服务器的IP和端口号,然后输入你的用户名和密码就可以登陆了。…

postman打开后,以前的接口记录不在,问题解决

要不这些文件保存在C:\Users\{用户名}\AppData\Roaming\Postman 比如,你目前使用的window登录用户是abc,那么地址便是C:\Users\abc\AppData\Roaming\Postman 打开后,这个目录下会有一些命名为backup-yyyy-MM-ddThh-mm-ss.SSSZ.json类似的文…

渗透攻击漏洞——原型链污染

背景 2019年初,Snyk的安全研究人员披露了流行的JavaScript库Lodash中一个严重漏洞的详细信息,该漏洞使黑客能够攻击多个Web应用程序,这个安全漏洞就是一个“原型污染漏洞”(JavaScript Prototype Pollution)&#xff…

【分布式】大模型分布式训练入门与实践 - 04

大模型分布式训练 数据并行-Distributed Data Parallel1.1 背景1.2 PyTorch DDP1) DDP训练流程2)DistributedSampler3)DataLoader: Parallelizing data loading4)Data-parallel(DP)5)DDP原理解析…

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引,初始值为…

Java IDEA controller导出CSV,excel

Java IDEA controller导出CSV,excel 导出excel/csv,亲测可共用一个方法,代码逻辑里判断设置不同的表头及contentType;导出excel导出csv 优化:有数据时才可以导出参考 导出excel/csv,亲测可共用一个方法&…

【多线程】Java如何实现多线程?如何保证线程安全?如何自定义线程池?

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 多线程 Java多线程1. 进程与线程2. 多线程1&am…

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040

线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…

【PyTorch】深度学习实践 01 Overview

人工智能概述 课程前置知识 线性代数 概率论 (不要有路径依赖,遇到不会的就现学)Python基础 人工智能 问题分类 人工智能,实际上就是利用计算机来代替人脑进行智能工作,计算机所要实现的智能可以分为两大部分&am…

python造测试数据存到excel

代码: from ExcelHandler import ExcelHandler from faker import Faker # 导入faker库的Faker方法 # ↓默认为en_US,只有使用了相关语言才能生成相对应的随机数据 fkFaker(locale"zh_CN")def create_date():m int(input(请输入要造的数据条…

PostgreSQL12中浮点数输出算法优化带来的小问题

最近碰到同事发来这样两个SQL,开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别,由于…

通俗介绍:什么是 Redis ?

刚接触 Redis 的伙伴们可能会因为不熟悉而感到困惑。本文简述 Redis 是什么、有哪些作用的问题,是一篇短浅而入门级别的文章。 Redis官网:Redis 打开 Redis 官网可以看到,官方对 Redis 的介绍是这样的:The open source, in-memo…

pytorch C++ 移植

文章目录 前言安装 libtorch安装 opencv(C)模型转换通过跟踪转换为 Torch Script通过注解转换为 Torch Script 编写 C 代码编译环境搭建C 库管理方法一:手动配置 visual studio 环境方法二:cmake 配置环境 python 调用 C 程序 前言…

艾伏尼布:一种用于治疗复发或难治性AML和胆管癌的IDH1抑制剂【医游记】

(图片来源于网络) 艾伏尼布,商品名为拓舒沃,是中国首个获批的针对异柠檬酸脱氢酶-1 (IDH1)突变癌症的强效口服靶向抑制剂1。这款药物最初由Agios Pharmaceuticals公司开发,2018年基石药业与Agios达成在大中华区开发及商业化的独家…

RK3399平台开发中安卓系统去除USB权限弹窗

RK3399平台开发中安卓系统去除USB权限弹窗 问题方法 问题 当我们在访问一个插入到Android系统的USB设备的时候往往是需要权限的,此时系统会弹出询问权限的对话框,而我们此时希望让它默认允许访问USB设备并且不希望用户看到这个对话框。 方法 文件目录&…

CSS - 常用属性和布局方式

目录 前言 一、常用属性 1.1、字体相关 1.2、文本相关 1.3、背景相关 1.3.1、背景颜色 1.3.2、背景图片 1.4、圆角边框 二、常用布局相关 2.1、display 2.2、盒子模型 2.2.1、基本概念 2.2.2、border 边框 2.2.3、padding 内边距 2.2.4、margin 外边距 2.3、弹…

gcc和makfile

gcc和makfile gcc预处理(进行宏替换)编译(生成汇编)汇编(生成机器可以识别的代码)连接(生成可以执行的文件或者库文件) makemakefile文件的编写 gcc 没安装的话,按照终端提示的安装命令安装就行 运行的格式: gcc [选项] [要编译的文件] [选项] [目标文件…

SylixOS BSP开发(八)

初始化FPU、MMU和Cache组件 本来想在不初始化这些部件的情况下把SylixOS先启动起来感受下,结果测试发现如果MMU不使能的话,系统启动过程中线程无法进行调度emm。。。所以只好把这一章节提前来讲了。这三个组件的初始化都是在bspInit.c中进行的。 1. FPU初…