跟阳仔一起学AI CNN 和 RNN

news2024/10/4 12:29:26

目录

卷积神经网络(CNN)

循环神经网络(RNN)

应用场景

代码示例

列举讲解

图像分类(使用 CNN)

语言翻译(使用 RNN)

总结

实例:OCR


 

        大家好,我是阳仔,一个对人工智能充满热情的新手。在这个快速发展的时代,人工智能技术已经成为推动许多行业革新的关键力量。从自动驾驶汽车到智能语音助手,从精准医疗到个性化教育,人工智能的应用无处不在,极大地改变了我们的生活方式和工作模式。作为一个初学者,我渴望探索这一领域的奥秘,学习如何利用这些强大的技术来解决实际问题。在这个学习旅程中,我希望能与大家分享我的学习心得和经验,同时也期待从大家那里获得宝贵的建议和指导。让我们一起在人工智能的浪潮中乘风破浪,探索未知的可能性! 

        在人工智能的领域中,卷积神经网络(CNN)和循环神经网络(RNN)是两种极具影响力的神经网络架构,它们在处理不同类型的数据和任务中展现出了各自独特的优势。今天咱们就简单学习一下卷积神经网络(CNN)和循环神经网络(RNN)是两种常见的深度学习模型,它们在处理不同类型的数据时各有优势。

卷积神经网络(CNN)

CNN 主要用于处理图像数据。它通过使用卷积层来自动提取图像中的特征,这使得它在图像识别和处理方面非常有效。CNN 的关键部分包括:

  • 卷积层(Convolutional Layer):通过滤波器(或称为卷积核)提取局部特征。
  • 激活层(Activation Layer):通常使用 ReLU 函数来增加非线性。
  • 池化层(Pooling Layer):降低特征维度,常用的方法有最大池化和平均池化。
  • 全连接层(Fully Connected Layer):将学到的“高级”特征映射到最终的分类或回归任务中。

循环神经网络(RNN)

RNN 主要用于处理序列数据,如文本、时间序列数据等。它的特点是在模型中引入了“记忆”元素,能够将先前的信息传递到当前的任务中,这使得它在处理序列相关问题时非常有效。RNN 的关键部分包括:

  • 循环单元(Recurrent Unit):能够处理输入数据的同时保持一个内部状态(或记忆),这个状态会随着每一个时间步被更新。
  • 隐藏层状态(Hidden State):保存了序列中之前时间步的信息。
  • 输出层(Output Layer):根据当前时间步的隐藏状态输出结果。
  • 应用场景对比

应用场景

  • CNN:图像识别、物体检测、图像分割等。
  • RNN:自然语言处理、语音识别、时间序列预测等。

代码示例

这里给出一个简单的 CNN 和 RNN 的 PyTorch 实现示例。

CNN 示例

import torch
import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1)
        self.relu = nn.ReLU()
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.fc = nn.Linear(16 * 14 * 14, 10)

    def forward(self, x):
        x = self.pool(self.relu(self.conv1(x)))
        x = x.view(-1, 16 * 14 * 14)
        x = self.fc(x)
        return x

RNN 示例

import torch
import torch.nn as nn

class SimpleRNN(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, num_classes):
        super(SimpleRNN, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
        out, _ = self.rnn(x, h0)
        out = out[:, -1, :]
        out = self.fc(out)
        return out

        这两个示例展示了如何在 PyTorch 中实现基本的 CNN 和 RNN 模型。希望这能帮助你更好地理解这两种网络的结构和功能。

列举讲解

我们通过一个具体的例子来进一步探讨卷积神经网络(CNN)和循环神经网络(RNN)的区别和适用场景。

例子:图像分类与语言翻译

图像分类(使用 CNN)

        假设我们有一个任务是对图像进行分类,比如识别一张图片是猫还是狗。这种类型的任务非常适合使用 CNN,因为 CNN 能够有效地从图像中提取空间层次的特征。

为什么选择 CNN:

图像是由像素的空间排列组成的,局部区域的像素组合往往包含重要信息(如边缘、纹理等),CNN 通过卷积层可以捕捉这些局部特征。卷积操作保持了图像的空间关系,使得模型能够学习到各种方向和位置的特征。池化层能够减少计算量同时保持特征的不变性(如平移不变性)。简单的 CNN 模型结构可能包括:

  1. 多个卷积层和激活层,用于提取图像特征。
  2. 池化层,用于降低特征维度。
  3. 全连接层,用于将提取的特征映射到分类结果。

语言翻译(使用 RNN)

        现在假设我们有一个任务是将英文翻译成中文。这种类型的任务非常适合使用 RNN,因为 RNN 能够处理序列数据,并且能够利用之前的信息(即上下文)来影响后续的输出。

为什么选择 RNN:

        语言翻译需要理解整个句子的上下文,这需要记忆之前的单词来更好地预测接下来的单词。RNN 通过其循环结构,能够将之前时间步的隐藏状态传递到当前时间步,从而保持了对之前信息的记忆。语言的序列性质使得序列模型(如 RNN)特别适用。简单的 RNN 模型结构可能包括:

  1. RNN 层,用于处理序列数据并保持时间上的状态。
  2. 全连接层,用于将 RNN 的输出映射到目标语言的词汇上。

总结

        CNN 更适合处理具有空间关联性的数据(如图像),通过其卷积层能够有效提取空间特征。        

        RNN 更适合处理序列数据(如文本),通过其循环结构能够处理时间序列信息并保持上下文的连续性。

实例:OCR

        OCR(光学字符识别)技术通常会使用 CNN,但在更复杂的系统中,可能会结合使用 CNN 和 RNN,以及其他技术如 CTC(Connectionist Temporal Classification)来提高识别的准确性和效率。

使用 CNN 的原因

        在 OCR 任务中,CNN 能够有效地从图像中提取特征。这些特征包括字符的形状、大小、方向等,这些都是进行字符识别所必需的。CNN 的层次结构使其非常适合从原始像素数据中逐层提取越来越抽象的视觉特征。

结合 RNN 的优势

        尽管 CNN 在图像特征提取方面表现出色,但 OCR 任务通常涉及到从图像中识别文本序列。这里的文本序列意味着字符之间存在依赖关系,单个字符的上下文信息对于正确识别非常重要。在这种情况下,RNN(特别是其变体如 LSTM 或 GRU)可以用来处理由 CNN 提取的特征序列,因为 RNN 能够处理序列数据并记住长序列中的上下文信息。

CTC 的作用

        在 OCR 中,尤其是当文本行的长度未知或者字符之间的间距不均匀时,直接从序列特征到文本输出的映射变得复杂。CTC 可以在这里发挥作用,它允许模型生成不定长的输出,并且能够在训练过程中自动对齐输入数据和目标文本标签。

综合模型示例

        一个典型的 OCR 系统可能包括以下步骤:

  1. 预处理:图像归一化、去噪、二值化等。
  2. 特征提取:使用 CNN 提取图像特征。
  3. 序列建模:使用 RNN 处理特征序列,捕捉字符之间的依赖关系。
  4. 解码:使用 CTC 或其他解码算法将 RNN 的输出转换为最终的文本。
  5. 代码示例

        这里是一个简化的模型结构,展示如何在 PyTorch 中结合 CNN 和 RNN 来处理 OCR 任务:

import torch
import torch.nn as nn

class CRNN(nn.Module):
    def __init__(self, num_classes):
        super(CRNN, self).__init__()
        self.cnn = nn.Sequential(
            nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        self.rnn = nn.LSTM(32, 64, num_layers=2, batch_first=True)
        self.fc = nn.Linear(64, num_classes)

    def forward(self, x):
        x = self.cnn(x)
        x = x.squeeze(2)  # 假设 x 的形状是 [batch_size, channels, height, width]
        x = x.permute(0, 2, 1)  # 调整维度以适应 RNN 输入
        x, _ = self.rnn(x)
        x = self.fc(x)
        return x
# 假设 num_classes 是字符集大小加上一个额外的空白标签用于 CTC
model = CRNN(num_classes=11)

        这个模型是一个简化的 CRNN(卷积循环神经网络),它结合了 CNN 的图像特征提取能力和 RNN 的序列处理能力,非常适合处理 OCR 任务。

        以上就是CNN和RNN的简单学习了总结,坚持跟阳仔一起学习AI知识。

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

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

相关文章

[数据集][目标检测]脑溢血检测数据集VOC+YOLO格式767张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):767 标注数量(xml文件个数):767 标注数量(txt文件个数):767 标注类别…

暑期社会实践来了,这份投稿攻略你收藏好!

一、文字投稿要求 (一)实践纪实类 1.内容充实,字数不低于1500字,标题10-30字,不允许用“精彩飞扬——大学实践队”形式,要求用一句话标题。导语新闻五要素齐全(即何人、何时、何地、何事、何因…

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成 大家好 我是寸铁👊 总结了一篇CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成✨ 喜欢的…

libevent源码跨平台编译(windows/macos/linux)

1.windows编译: 克隆: git clone https://github.com/libevent/libevent.git 克隆成功 生成makefile 生成成功 默认不支持OpenSSL,MbedTLS,ZLIB这三个库 编译: cmake --build . --config release

数学建模 —— 聚类分析(3)

目录 一、聚类分析概述 1.1 常用聚类要素的数据处理 1.1.1 总和标准化 1.1.2 标准差标准化 1.1.3 极大值标准化 1.1.4 极差的标准化 1.2 分类 1.2.1 快速聚类法(K-均值聚类) 1.2.2 系统聚类法(分层聚类法) 二、分类统计…

vue3 递归循环展示下级盒子

index.vue主文件 <template><div><RecursiveCard :data"rootTask" /></div> </template><script> import { reactive } from vue; import RecursiveCard from ./test.vue; // 递归组件的路径export default {components: {Recu…

使用HTML、CSS和JavaScript编写一个注册界面(一)

倘若文章或代码中有任何错误或疑惑&#xff0c;欢迎提出交流哦~ HTML和CSS 首先&#xff0c;我们需要编写一个简洁的注册界面。 简单编写下&#xff0c;如下&#xff1a; 呈现效果为&#xff1a; <!DOCTYPE html> <html lang"en"><head><me…

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)

场景 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑&#xff1a; DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑_jenkins的安装以及集成jdkgitmaven 提示警告-CSDN博客 Windows10(家庭版…

v31支架固定方式

CK_Label_v31 夹子固定方式 底座粘贴固定方式

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:中国舰船研究院

中国舰船研究院又称中国船舶重工集团公司第七研究院&#xff0c;隶属于中国船舶重工集团公司&#xff0c;是专门从事舰船研究、设计、开发的科学技术研究机构&#xff0c;是中国船舶重工集团公司的军品技术研究中心、科技开发中心&#xff1b;主要从事舰船武器装备发展战略研究…

三丰云免费服务器

三丰云网址&#xff1a; https://www.sanfengyun.com 可申请免费云服务器&#xff0c;1核/1G内存/5M宽带/有公网IP/10G SSD硬盘/免备案。 收费云服务器&#xff0c;买2年送1年&#xff0c;有很多优惠

10分钟搞定!用DearPyGui打造你的Python界面

大家好&#xff0c;在Python的众多第三方库中&#xff0c;DearPyGui是一个非常独特且强大的库。它不仅能帮助开发者快速构建图形用户界面&#xff08;GUI&#xff09;&#xff0c;还简化了很多复杂的操作。 什么是DearPyGui&#xff1f; DearPyGui是一款基于ImGui的Python图形…

前端canvas绘图,利用canvas在图片上面绘制标记以及给canvas添加点击事件。

前端canvas绘图&#xff0c;利用canvas在图片上面绘制标记以及给canvas添加点击事件。 需要实现的效果如下图: 首先需要一个承载的核心画布 <canvas id"canvas" width"800" height"600"></canvas>全部代码&#xff1a; <!DOCT…

JVMの内存泄漏内存溢出案例分析

1、内存溢出 内存溢出指的是程序在申请内存时&#xff0c;没有足够的内存可供分配&#xff0c;导致无法满足程序的内存需求&#xff0c;常见的内存溢出情况包括堆内存溢出&#xff08;Heap Overflow&#xff09;和栈溢出&#xff08;Stack Overflow&#xff09;&#xff1a; …

短视频外卖平台区域代理怎么拿?两种方法!

抖音外卖平台区域代理怎么拿&#xff1f;市面上只有两种途径可走。没有其他任何方法。 一是拿抖音官方区域服务商身份&#xff0c;第一个要求是保证金50万&#xff0c;公司必须还要有20个人以上的社保证明。同时还要提供企业半年的银行资金流水。如果小型公司基本是不用考虑的…

R语言数据探索和分析21-中国GDP及其影响因素多元线性回归分析

一、研究背景和意义 GDP 是宏观经济中最受关注的经济统计数字&#xff0c;目前我国国内生产总值年均增长率均明显高于同期美、日等发达经济体和巴 西、俄罗斯、南非、印度等其他金砖国家&#xff0c;成为世界经济增长的主力军&#xff0c;GDP 的增长对一个国家有着十分重要的意…

30天变现5位数,涨粉2w,用AI做治愈系插图,5分钟一套,太香了(附工具教程)

前段时间和一位朋友聊天&#xff0c;他说现在靠 AI 赚到钱的&#xff0c;全是那些卖课的&#xff01;还说得很气愤。 我竟然一时不知道说什么好。 虽然我并不认同他的说法&#xff0c;但也没有再说什么了。 因为人们往往会根据自己已有的认知体系&#xff0c;去判断一件事。…

【Python字符串攻略】:玩转文字,编织程序的叙事艺术

文章目录 &#x1f680;一.字符串基础&#x1f308;二.查看数据类型⭐三.转化❤️四.字符串索引&#x1f6b2;五.字符串切片&#x1f3ac;六.字符串切片-步长☔七.反向切片注意事项&#x1f6b2;八.字符串&#x1f4a5;查&#x1f4a5;改&#x1f4a5;删 ❤️九.字符串拼接&…

引擎:UI

一、控件介绍 Button 按钮 创建一个按钮 按钮禁用 精灵模式 颜色模式 缩放模式 绑定点击事件 EditBox 输入框 Layout 布局 支持水平排列、垂直排列、背包排列 PageView 页面视图 ProgressBar 进度条 RichText 富文本 绑定点击事件 事件可以被其它标签包裹 图文混排 Scroll…

2年JAVA今日头条3轮面试经历

面头条的时候已经是十月底了。大半个月没有面试&#xff0c;之前准备的知识点比如http状态码之类的记忆性的东西&#xff0c;早就忘光了。 二面的时候问了一堆状态码&#xff0c;全都不记得了。面试官态度很好&#xff0c;跟我说&#xff0c;你现在不记得了&#xff0c;说明你…