深度学习中的模型架构详解

在自然语言处理(NLP)领域,模型架构的不断发展极大地推动了技术的进步。从早期的循环神经网络(RNN)到长短期记忆网络(LSTM)、再到卷积神经网络(TextCNN)和Transformer,每一种架构都带来了不同的突破和应用。本文将详细介绍这些经典的模型架构及其在PyTorch中的实现。

循环神经网络 (RNN)

循环神经网络(RNN)是一种适合处理序列数据的神经网络架构。与传统的前馈神经网络不同,RNN具有循环连接,能够在序列数据的处理过程中保留和利用之前的状态信息。

image.png

RNN的优点
  • 处理序列数据:可以处理任意长度的序列数据,并能够记住序列中的上下文信息。
  • 参数共享:在不同时间步之间共享参数,使得模型在处理不同长度的序列时更加高效。
RNN的缺点
  • 梯度消失和爆炸:在训练过程中,RNN会遇到梯度消失和梯度爆炸的问题。
  • 长距离依赖问题:难以捕捉长距离依赖关系。
RNN的代码实现
import torch
import torch.nn as nnclass TextRNN(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, num_layers, dropout, num_classes):super(TextRNN, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers, batch_first=True, dropout=dropout)self.fc = nn.Linear(hidden_dim, num_classes)self.dropout = nn.Dropout(dropout)def forward(self, x):x = self.embedding(x)rnn_out, hidden = self.rnn(x)x = self.dropout(rnn_out[:, -1, :])x = self.fc(x)return x

长短期记忆网络 (LSTM)

LSTM是一种特殊的RNN,旨在解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题。LSTM通过引入记忆单元和门控机制,能够更好地捕捉和保留长距离依赖关系。

image.png

LSTM的优点

解决长距离依赖问题:能够记住长时间跨度内的重要信息。
缓解梯度消失和爆炸问题:通过门控机制,能够更稳定地传递梯度。

LSTM的缺点

计算复杂度高:结构复杂,计算成本高。
难以并行化:顺序计算特性限制了并行化的能力。

LSTM的代码实现
import torch
import torch.nn as nnclass TextLSTM(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, num_layers, dropout, num_classes):super(TextLSTM, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.lstm = nn.LSTM(embedding_dim, hidden_dim, num_layers, batch_first=True, dropout=dropout)self.dropout = nn.Dropout(dropout)self.fc = nn.Linear(hidden_dim, num_classes)def forward(self, x):x = self.embedding(x)batch_size, seq_len, _ = x.shapeh_0 = torch.zeros(self.lstm.num_layers, batch_size, self.lstm.hidden_size).to(x.device)c_0 = torch.zeros(self.lstm.num_layers, batch_size, self.lstm.hidden_size).to(x.device)x, (h_n, c_n) = self.lstm(x, (h_0, c_0))x = self.dropout(h_n[-1])x = self.fc(x)return x

TextCNN

TextCNN是一种应用于NLP任务的卷积神经网络模型,主要用于文本分类任务。TextCNN通过卷积操作提取文本的局部特征,再通过池化操作获取全局特征。

image.png

TextCNN的优点

高效提取局部特征:卷积操作能够有效提取不同n-gram范围内的局部特征。
并行计算:卷积操作和池化操作可以并行计算,训练和推理速度快。

TextCNN的缺点

缺乏长距离依赖:在捕捉长距离依赖方面不如LSTM等序列模型。
固定大小的卷积核:对于变长依赖的建模能力有限。

TextCNN的代码实现
import torch
import torch.nn as nnclass TextCNN(nn.Module):def __init__(self, vocab_size, embedding_dim, num_filters, kernel_sizes, dropout, num_classes):super(TextCNN, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.convs = nn.ModuleList([nn.Conv2d(1, num_filters, (k, embedding_dim)) for k in kernel_sizes])self.dropout = nn.Dropout(dropout)self.fc = nn.Linear(num_filters * len(kernel_sizes), num_classes)def forward(self, x):x = self.embedding(x).unsqueeze(1)x = [torch.relu(conv(x)).squeeze(3) for conv in self.convs]x = [torch.max_pool1d(i, i.size(2)).squeeze(2) for i in x]x = torch.cat(x, 1)x = self.dropout(x)x = self.fc(x)return x

Transformer

Transformer是一种基于注意力机制的模型架构,能够更好地处理长距离依赖关系。Transformer由编码器和解码器组成,每个编码器和解码器包含多个自注意力层和前馈神经网络层。

image.png

Transformer的优点

捕捉长距离依赖:通过自注意力机制,能够有效捕捉长距离依赖关系。
并行计算:没有RNN的顺序计算限制,能够并行处理序列数据。

Transformer的缺点

计算复杂度高:自注意力机制的计算复杂度较高,特别是对于长序列数据。
需要大量数据:Transformer通常需要大量数据进行训练,以充分发挥其性能。

Transformer的代码实现
import torch
import torch.nn as nn
import torch.nn.functional as Fclass TransformerModel(nn.Module):def __init__(self, vocab_size, embedding_dim, num_heads, num_layers, dropout, num_classes):super(TransformerModel, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.transformer = nn.Transformer(embedding_dim, num_heads, num_layers, num_layers, dropout=dropout)self.fc = nn.Linear(embedding_dim, num_classes)def forward(self, x):x = self.embedding(x).permute(1, 0, 2)x = self.transformer(x)x = x.mean(dim=0)x = self.fc(x)return x

结论

本文详细介绍了RNN、LSTM、TextCNN和Transformer的基本原理、优缺点及其在PyTorch中的实现。这些模型在自然语言处理任务中各有优势,选择合适的模型架构可以显著提升任务的性能。

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

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

相关文章

完美解决html2canvas + jsPDF导出pdf分页内容截断问题

代码地址:https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案,但是在实践过程中,遇到的最大问题就是分页截断的问题:当页面元素超过一页A4纸的时候,连续的页面就会…

python处理时间,按照周分割时间段

在实际的开发中,我们经常要设计一些工具类,对于时间来说,有时候需要将其处理成时间段。 例如,对于2024年08月01日到2024年08月16日的时间段,我们如何将其处理成时间段[2024-08-01, 2024-08-03], [2024-08-04, 2024-08-…

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官

OSL 望为香港数字资产市场发展建设添砖加瓦 (香港,2024 年 8 月 13 日)- 8 月 11 日至 12 日, 由 香港唯一专注数字资产的上市公司 OSL 集团(863.HK)冠名赞助,Foresight News、 Foresight Ventu…

基于免疫算法的最优物流仓储点选址方案MATLAB仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于免疫算法的最优物流仓储点选址方案MATLAB仿真。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 (完整程序运行后无水印) 3…

pytorch-AutoEncoders

目录 1. 监督学习&无监督学习1.1 监督学习1.2 无监督学习1.3 为什么需要无监督学习 2. AutoEncoders3. Auto Encoders loss function4. PCA VS Auto Encoders5. Auto Encoders的变种5.1 Denoising Auto Encoders5.2 Dropout AutoEncoders5.3 Adversarial AutoEncoders5.4 V…

html 关于table合并外边框以及自动滚动问题汇总

合并外边框 .tab_main{ width: 100%; height:100%; border: 1px solid #ccc; text-align: center; border-spacing: 0; border-collapse: collapse;//合并外边框 } 固定高度显示上下滑动 <div styleoverflow:scroll;height:100%> <di…

hive之greatest和least函数

1、greatest函数&#xff1a; greatest(col_a, col_b, ..., col_n)比较n个column的大小&#xff0c;过滤掉null或对null值进行处理&#xff0c;当某个column中是string&#xff0c;而其他是int/double/float等时&#xff0c;返回null&#xff1b; 举例&#xff1a; select g…

鸿蒙自定义Tab,可居左显示

最近写鸿蒙项目时&#xff0c;需要用到类似Android的TabLayout控件&#xff0c;鸿蒙官方也有提供类似实现的组件Tabs。但是官方Tabs组件&#xff0c;实在有点鸡肋&#xff0c;首先 TabContent和 TabBar是绑定在一起的放在Tabs里面的&#xff0c;如果UI是TabBar的背景是一个整体…

三十七、【人工智能】【机器学习】【监督学习】- AdaNet算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

GPS叉车安全管理系统,远程监控管理车辆,保障叉车资产安全!

叉车的管理和监管一直是一个挑战&#xff0c;九盾叉车监管系统旨在实现对叉车资产的全面监管和管理&#xff0c;结合了GPS车辆定位技术&#xff0c;为您提供了实时、精确的叉车位置信息&#xff0c;从而帮助您更好地管理您的叉车资产。 一、IC卡指纹认证&#xff1a; 确保叉车…

工程数学线性代数(同济大学数学系)第六版(更新中)

第1章 行列式 2 全排列和对换 一、排列及其逆序数 全排列 1个逆序、逆序数 奇排列&#xff0c;偶排列 二、对换 对换&#xff1a;排列中任意两个元素对调 相邻对换&#xff1a;相邻两个元素对换 对换改变排列的奇偶性。 4 行列式的性质 5 行列式按行&#xff08;列&…

【网络】UDP和TCP之间的差别和回显服务器

文章目录 UDP 和 TCP 之间的差别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP API 的使用UDP APIDatagramSocket构造方法方法 DatagramPacket构造方法方法 回显服务器&#xff08;Echo Server&#xff09;1. 接收请求2. 根据请求计算响应3. 将…

极狐 GitLab 依赖扫描:助力开发者管理软件供应链

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

C#使用SharGL实现PUMA560机械臂

1、四轴机械臂 下载链接&#xff1a;https://download.csdn.net/download/panjinliang066333/89645225 关键代码 public void DrawRobot1(ref OpenGL gl,float[] angle,float[] yLength,bool isPuma560_Six){//坐标系说明&#xff1a;//①X轴正向&#xff1a;屏幕朝右//②Y轴…

Vue封装axios请求(超详细)

一、简介 Vue封装axios请求是指将axios库集成到Vue项目中,以便更方便地发送HTTP请求。首先,需要安装axios库,然后在Vue项目中创建一个名为request.js的文件,用于封装axios实例。在这个文件中,可以设置默认的配置,如基础URL、超时时间等。接下来,可以定义一些常用的请求方…

魔方远程时时获取短信内容APP 前端Vue 后端Ruoyi框架(含搭建教程)

前端Vue 后端Ruoyi框架 APP原生JAVA 全兼容至Android14(鸿蒙 澎湃等等) 前后端功能&#xff1a; ①后端可查看用户在线状态(归属地IP) ②发送短信(自定义输入收信号码以及短信内容&#xff0c;带发送记录) ③短信内容分类清晰(接收时间、上传时间等等) ④前后端分离以及A…

攸信动态丨CEIA电子智造论坛:聚焦高可靠性与智能制造,攸信技术受邀参展

第120届CEIA电子智造线下活动-导电高可靠性与智能制造&先进封装与系统集成创新发展论坛于8月8号&#xff0c;在厦门磐基希尔顿酒店召开&#xff0c;本次大会聚焦新型显示、EV汽车电子、智能家电等领域&#xff0c;受到了行业人士的重点关注&#xff0c;超300名行业同仁参会…

【网络】高并发场景处理:线程池和IO多路复用

文章目录 短时间内有大量的客户端的解决方案线程池IO 多路复用 短时间内有大量的客户端的解决方案 创建线程是比较经典的一种服务器开发模型&#xff0c;给每个客户端分配一个线程来提供服务 但一旦短时间内有大量的客户端&#xff0c;并且每个客户端请求都是很快的&#xff…

企业为什么需要安装加密软件

1. 数据保护 防止数据泄露&#xff1a;加密软件通过对敏感数据进行加密处理&#xff0c;确保即使数据在传输或存储过程中被截获&#xff0c;也无法被未授权人员读取或利用&#xff0c;从而有效防止数据泄露。 完整性保护&#xff1a;加密不仅保护数据的机密性&#xff0c;还通…

政务网站(.gov)专用SSL/HTTPS证书

政府网站在选择SSL证书时不仅需要遵循网络安全法规以及密评整改&#xff0c;更要提升公众信任度。国产服务商提供的专业版SSL证书&#xff0c;全方位符合政务部门对SSL证书的要求 1 算法要求 政务服务网站需要落实等保制度、密评制度&#xff0c;在密码应用上可选择国密算法S…