ROCm上运行情感分析:使用卷积神经网络

15.3. 情感分析:使用卷积神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai)

代码

import torch
from torch import nn
from d2l import torch as d2lbatch_size = 64
train_iter, test_iter, vocab = d2l.load_data_imdb(batch_size)def corr1d(X, K):w = K.shape[0]Y = torch.zeros((X.shape[0] - w + 1))for i in range(Y.shape[0]):Y[i] = (X[i: i + w] * K).sum()return YX, K = torch.tensor([0, 1, 2, 3, 4, 5, 6]), torch.tensor([1, 2])
corr1d(X, K)def corr1d_multi_in(X, K):# 首先,遍历'X'和'K'的第0维(通道维)。然后,把它们加在一起return sum(corr1d(x, k) for x, k in zip(X, K))X = torch.tensor([[0, 1, 2, 3, 4, 5, 6],[1, 2, 3, 4, 5, 6, 7],[2, 3, 4, 5, 6, 7, 8]])
K = torch.tensor([[1, 2], [3, 4], [-1, -3]])
corr1d_multi_in(X, K)class TextCNN(nn.Module):def __init__(self, vocab_size, embed_size, kernel_sizes, num_channels,**kwargs):super(TextCNN, self).__init__(**kwargs)self.embedding = nn.Embedding(vocab_size, embed_size)# 这个嵌入层不需要训练self.constant_embedding = nn.Embedding(vocab_size, embed_size)self.dropout = nn.Dropout(0.5)self.decoder = nn.Linear(sum(num_channels), 2)# 最大时间汇聚层没有参数,因此可以共享此实例self.pool = nn.AdaptiveAvgPool1d(1)self.relu = nn.ReLU()# 创建多个一维卷积层self.convs = nn.ModuleList()for c, k in zip(num_channels, kernel_sizes):self.convs.append(nn.Conv1d(2 * embed_size, c, k))def forward(self, inputs):# 沿着向量维度将两个嵌入层连结起来,# 每个嵌入层的输出形状都是(批量大小,词元数量,词元向量维度)连结起来embeddings = torch.cat((self.embedding(inputs), self.constant_embedding(inputs)), dim=2)# 根据一维卷积层的输入格式,重新排列张量,以便通道作为第2维embeddings = embeddings.permute(0, 2, 1)# 每个一维卷积层在最大时间汇聚层合并后,获得的张量形状是(批量大小,通道数,1)# 删除最后一个维度并沿通道维度连结encoding = torch.cat([torch.squeeze(self.relu(self.pool(conv(embeddings))), dim=-1)for conv in self.convs], dim=1)outputs = self.decoder(self.dropout(encoding))return outputsembed_size, kernel_sizes, nums_channels = 100, [3, 4, 5], [100, 100, 100]
devices = d2l.try_all_gpus()
net = TextCNN(len(vocab), embed_size, kernel_sizes, nums_channels)def init_weights(m):if type(m) in (nn.Linear, nn.Conv1d):nn.init.xavier_uniform_(m.weight)net.apply(init_weights);glove_embedding = d2l.TokenEmbedding('glove.6b.100d')
embeds = glove_embedding[vocab.idx_to_token]
net.embedding.weight.data.copy_(embeds)
net.constant_embedding.weight.data.copy_(embeds)
net.constant_embedding.weight.requires_grad = Falselr, num_epochs = 0.001, 5
trainer = torch.optim.Adam(net.parameters(), lr=lr)
loss = nn.CrossEntropyLoss(reduction="none")
d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs, devices)d2l.predict_sentiment(net, vocab, 'this movie is so great')d2l.predict_sentiment(net, vocab, 'this movie is so bad')

代码解析

这段代码实现了一个用于情感分析的文本分类模型。它使用了IMDb评论数据集,并应用了一种被称为TextCNN的卷积神经网络架构。下面依次对代码中的各个部分进行解释:
1. 导入相关库:

    import torchfrom torch import nnfrom d2l import torch as d2l

    导入PyTorch库、神经网络模块和`d2l`工具箱,`d2l`工具箱是为了简化实现并提供了辅助函数。
2. 加载数据集:

    batch_size = 64train_iter, test_iter, vocab = d2l.load_data_imdb(batch_size)

    加载IMDb电影评论数据集,并将数据分成小批量进行训练,`batch_size`是每批次训练的样本数量。
3. 实现一维互相关操作:

    def corr1d(X, K):# 函数实现

    互相关运算在卷积神经网络中使用,它类似于一维卷积。
4. 实现多输入通道的一维互相关操作:
    

    def corr1d_multi_in(X, K):# 函数实现

    当输入数据具有多个通道时,将每个通道的互相关运算结果相加起来,以得到最终结果。
5. 定义TextCNN模型:

    class TextCNN(nn.Module):def __init__(self, vocab_size, embed_size, kernel_sizes, num_channels):# 模型初始化def forward(self, inputs):# 模型前向传播

    TextCNN模型通过嵌入层(`nn.Embedding`)将单词映射到低维空间,然后使用卷积层(`nn.Conv1d`)提取局部特征,最后通过一个全连接层(`nn.Linear`)进行分类。
6. 初始化模型权重:

    def init_weights(m):if type(m) in (nn.Linear, nn.Conv1d):nn.init.xavier_uniform_(m.weight)net.apply(init_weights)

    通过`apply`函数将初始化操作`init_weights`应用到模型的每个子模块上。
7. 将预训练的词嵌入加载到模型中:

    glove_embedding = d2l.TokenEmbedding('glove.6b.100d')embeds = glove_embedding[vocab.idx_to_token]net.embedding.weight.data.copy_(embeds)net.constant_embedding.weight.data.copy_(embeds)net.constant_embedding.weight.requires_grad = False

    使用GloVe预训练的100维词向量来初始化嵌入层,并固定其中一部分的权重(`constant_embedding`)以防止训练过程中被更新。
8. 训练模型:

    lr, num_epochs = 0.001, 5trainer = torch.optim.Adam(net.parameters(), lr=lr)loss = nn.CrossEntropyLoss(reduction="none")d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs, devices)

    设置优化器、学习率和损失函数,并开始训练。`train_ch13`函数来自`d2l`工具箱,负责模型的训练过程。
9. 使用训练好的模型进行情感预测:

    d2l.predict_sentiment(net, vocab, 'this movie is so great')d2l.predict_sentiment(net, vocab, 'this movie is so bad')

    调用预测函数`predict_sentiment`测试模型效果,传入模型、词汇表和待预测的句子,函数会输出句子的情感倾向(正面或负面)。

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

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

相关文章

分布式任务调度内的 MySQL 分页查询优化

作者:vivo 互联网数据库团队- Qiu Xinbo 本文主要通过图示介绍了用主键进行分片查询的过程,介绍了主键分页查询存在SQL性能问题,如何去创建高效的索引去优化主键分页查询的SQL性能问题。 对于数据分布不均如何发现,提供了一些SQL…

C语言初阶——5操作符

一、算数操作符 除了% 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于/ 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除 法。% 操作符的两个操作数必须为整数。返回的是整除之后的余数。 1、类型转换 C语言…

Simplicity Studui V5 新安装后无法Product Updates

之前(2021年)在SiliconLabs官网下载了SSV5,安装包我也保存在硬盘了,最近换了台电脑安装SSV5后安装 SDK之前必须Product Updates,但死活安装不上,老是提示发生了错误。来来回回卸载安装几十遍,后…

瓦解信息茧房,IPWO打破“墙”的限制

国外与国内的网络之间隔着一道无形的“墙”,这面“墙”让我们避免了海外不法分子的窥视,保护了我们的网络隐私。但是,“墙”的存在同样阻止了我们访问全球网络,获取海外资源,形成巨大的信息茧房。 越来越多的人渴望撕开…

Plant Simulation 双深位立库开发系列教程-出入口参数化

上一节讲到货架参数化,这一节我们继续讲出入口参数化,先看我们需要达到的效果,在Conveyor增加一个出入口设置功能,用户可以通过该功能设置多个出入口 步骤1:创建ConveyorList 在RackLane中新建一个表格ConveyorList,用于存储用户的设置参数 表格设置名字、类型、方向 、…

Docker配置国内镜像源

添加Docker国内镜像源 在/etc/docker/daemon.json文件中添加以下内容: {"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"] }重启docker s…

paligemma、Grounding-DINO-1.5简单无需标注无需训练直接可以使用的VLM图像到文本模型

1、paligemma 参考:https://github.com/google-research/big_vision/blob/main/big_vision/configs/proj/paligemma/README.md 模型架构: 文本与图像特征一起送入大模型 在线体验网址: https://huggingface.co/spaces/big-vision/paligemma 通过文字prompt既可与图片对话…

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

QT creator centralwidget前面有个禁止符号

centralwidget前面有个禁止符号:表示分拆布局 在主窗口空白处,右键,选择布局即可选择不同的布局方式,表示对窗口内所有控件部件进行布局,不如垂直布局。

【机器学习】—机器学习和NLP预训练模型探索之旅

目录 一.预训练模型的基本概念 1.BERT模型 2 .GPT模型 二、预训练模型的应用 1.文本分类 使用BERT进行文本分类 2. 问答系统 使用BERT进行问答 三、预训练模型的优化 1.模型压缩 1.1 剪枝 权重剪枝 2.模型量化 2.1 定点量化 使用PyTorch进行定点量化 3. 知识蒸馏…

高光谱成像技术简介,怎么选择成像方案?

目录 一、什么是光谱?二、光谱和光谱分析方法的类型三、多光谱和高光谱的区别四、高光谱在水果品质检测中的应用1. 高光谱成像系统2. 高光谱图像的获取方式3. 高光谱图像处理与分析4. 在水果品质检测中的应用总结 五、针对自己的应用场景怎么使用高光谱技术六、参考…

海山数据库(He3DB)从方法到实践,构建以场景为中心的体验管理体系

编者按:体验优化的过程中设计师经常会遇到几个阶段,发现问题、定义问题、优化问题、查看反馈,但在产品快速迭代的过程中,体验的问题经常被归类到“不紧急”需求中,并逐步转为长尾问题,这些不被重视的问题聚…

【OpenGL实践10】关于几何着色器

目录 一、说明 二、几何着色器 2.1 设置 2.2 基本几何着色器 2.2.1 输入类型 2.2.2 输出类型 2.2.3 顶点输入 2.2.4 顶点输出 2.3 创建几何着色器 2.4 几何着色器和顶点属性 三、动态生成几何体 四、结论 练习 一、说明 几何着色器的应用比较高级,关于…

Epson推出的FC2012AN晶体专为小尺寸、低ESR应用设计

在可穿戴设备、loT产品、无线通信模块等领域,对于小型化、低功耗和高精度的时钟需求日益增长。Epson推出的FC2012AN系列晶体单元凭借其小尺寸、低ESR等特性使其成为这些应用的理想选择。 FC2012AN系列是一款32.768K频率的晶体单元,频率偏差为 20x10-6…

【云原生】kubernetes中的service原理、应用实战案例解析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

DSPy - prompt 优化

文章目录 一、关于 DSPy与神经网络的类比常见问题解答**DSPy 优化器可以调整什么?****我应该如何使用 DSPy 完成我的任务?****如果我对提示或合成数据生成有更好的想法怎么办?**DSPy 代表什么? 二、安装三、文档A) 教程B) 指南C) …

全球手游4月战报,《Monopoly GO!》荣耀再续!全球手游畅销榜冠军

易采游戏网5月22日消息,在刚刚过去的四月里,全球移动游戏市场的角逐愈发激烈。根据最新发布的数据,Scopely旗下的经典游戏《Monopoly GO!》再次蝉联全球手游畅销榜首冠军宝座,展现了无与伦比的市场魅力与玩家黏度。 4月Scopely《M…

中霖教育怎么样?二建继续教育几年一次?

中霖为大家介绍: 根据相关规定,二级建造师执业资格注册证书设定有效期限为三年。为确保持证人员的专业能力,在规定的期限内需要完成规定的继续教育课程并参加考核,以此来维护其职业资质的连续性。 在执业资格证书的有效期满前&a…

redis小知识

AOF与RDB的区别 AOF (Append Only File) 和 RDB (Redis Database) 都是Redis中的持久化机制,但有以下几点不同之处: 内容格式:AOF 以日志的形式记录所有写操作命令,而 RDB 则是在指定的时间间隔内对数据库进行快照,将数…

WDW-100G 高温拉力试验机 技术方案书

一、整机外观图: 二、项目简介: 微机控制高温拉力试验机是电子技术与机械传动相结合的新型材料试验机,它具有宽广准确的加载速度和测力范围,对载荷、变形、位移的测量和控制有较高的精度和灵敏度,还可以进行等速加载、…