TextCNN:文本卷积神经网络模型

news/2024/10/4 20:22:29/文章来源:https://blog.csdn.net/weixin_45880844/article/details/142167829

目录

  • 什么是TextCNN
  • 定义TextCNN类
  • 初始化一个model实例
  • 输出model

什么是TextCNN

  • TextCNN(Text Convolutional Neural Network)是一种用于处理文本数据的卷积神经网(CNN)。通过在文本数据上应用卷积操作来提取局部特征,这些特征可以捕捉到文本中的局部模式,如n-gram(连续的n个单词或字符)。

定义TextCNN类

import torch.nn as nn# 它继承自 PyTorch 的 nn.Module
class TextCNN(nn.Module):# __init__:类的构造函数,初始化模型,包括嵌入层、卷积层、dropout层和全连接层def __init__(self, vocab_size, embed_dim, num_classes, num_filters, kernel_sizes):# 调用父类 nn.Module 的构造函数super(TextCNN, self).__init__()# 创建一个嵌入层,将词汇表中的每个单词映射到一个embed_dim 维的向量空间。vocab_size 是词汇表的大小self.embedding = nn.Embedding(vocab_size, embed_dim)# 创建一个卷积层列表,每个卷积层使用不同的 kernel_size。in_channels 是嵌入向量的维度,out_channels 是每个卷积核输出的特征数量self.convs = nn.ModuleList([nn.Conv1d(in_channels=embed_dim, out_channels=num_filters, kernel_size=k) for k in kernel_sizes])# 创建一个 Dropout 层,用于在训练过程中随机丢弃 50% 的节点,以减少过拟合self.dropout = nn.Dropout(0.5)# 创建一个全连接层,将卷积层的输出连接到最终的分类结果。# 输入特征的数量是卷积核数量乘以每个卷积核的输出特征数量,输出特征数量是分类类别的数量self.fc = nn.Linear(len(kernel_sizes) * num_filters, num_classes)# forward:定义模型的前向传播过程。# x:输入数据,通常是文本的整数序列。def forward(self, x):# 将输入数据通过嵌入层转换为嵌入向量x = self.embedding(x)  # 调整张量维度,以便卷积操作可以在嵌入向量的维度上进行x = x.transpose(1, 2) # 对每个卷积层应用激活函数 ReLU,生成特征图convs = [torch.relu(conv(x)) for conv in self.convs]  # 对每个卷积层的输出应用最大池化,以减少特征图的维度pooled = [torch.max_pool1d(conv, conv.size(2)).squeeze(2) for conv in convs]  # 将所有卷积层的最大池化结果拼接在一起,形成一个单一的特征向量cat = torch.cat(pooled, 1) # 通过 Dropout 层和全连接层进行分类,输出最终的分类结果return self.fc(self.dropout(cat))

初始化一个model实例

vocab_size = 1000
embed_dim = 128
num_classes = 2
num_filters = 100
kernel_sizes = [3, 4, 5]model = TextCNN(vocab_size, embed_dim, num_classes, num_filters, kernel_sizes)

输出model

TextCNN((embedding): Embedding(8, 128)(convs): ModuleList((0): Conv1d(128, 100, kernel_size=(3,), stride=(1,))(1): Conv1d(128, 100, kernel_size=(4,), stride=(1,))(2): Conv1d(128, 100, kernel_size=(5,), stride=(1,)))(dropout): Dropout(p=0.5, inplace=False)(fc): Linear(in_features=300, out_features=2, bias=True)
)
  • Embedding(8, 128):这是一个嵌入层,它将词汇表中的每个单词映射到一个128维的向量空间。这里的8表示词汇表的大小(即输入序列中可能的最大单词索引),128表示每个单词将被映射到的向量维度。
  • convs: ModuleList[...]:这是一个包含多个一维卷积层(Conv1d)的模块列表。每个卷积层都用于提取文本数据的不同局部特征。
  • Conv1d(128, 100, kernel_size=(3,), stride=(1,)):每个卷积层有128个输入通道(与嵌入层的输出维度相同)和100个输出通道(即100个滤波器)。kernel_size=3表示每个滤波器的窗口大小为3个词。stride=1表示滤波器在文本序列上滑动的步长为1
  • Dropout(p=0.5, inplace=False):这是一个Dropout层,它在训练过程中随机丢弃50%的节点,以减少过拟合。inplace=False表示Dropout操作不会在原地修改输入张量。
  • fc: Linear(in_features=300, out_features=2, bias=True):这是一个全连接层,它将卷积层和Dropout层的输出转换为最终的分类结果。in_features=300表示全连接层的输入特征数量(这是由卷积层的数量和每个卷积层的输出特征数量决定的,即3个卷积层各100个特征)。out_features=2表示输出特征的数量,这通常与分类任务的类别数相对应(在这个例子中,可能是二分类问题)。bias=True表示全连接层的权重将包含偏置项。

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

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

相关文章

Linux下进程间的通信--共享内存

共享内存概述: 共享内存是进程间通信的一种方式,它允许两个或多个进程共享一个给定的存储区。共享内存是最快的一种IPC形式,因为它允许进程直接对内存进行读写操作,而不需要数据在进程之间复制。 共享内存是进程间通信&#xff…

黑马头条第八天实战(上)

D8 1)登录功能需求说明 用户根据用户名和密码登录密码需要手动加盐验证需要返回用户的token和用户信息 2)模块搭建思路步骤 2.1)模块作用 先捋一下之前搭模块干了啥 feign-api 远程调用 自媒体保存时调用远程客户端进行增加文章&#x…

计算机毕业设计 基于SpringBoot的课程教学平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

架构模式:MVC

引言 MVC,即 Model(模型)-View(视图)-Controller(控制器),是广泛应用于交互式系统中的典型架构模式,尤其在 GUI 和 Web 应用中。 MVC 的概念源自 GOF(Gang …

rtems 5.3 qemu realview_pbx_a9 环境搭建:bsp 编译

参考文章 rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链 开发环境 windows 10 64 位 VMware Workstation Pro 16 rtems-5.3 发布代码 rtems-5.3 arm gcc 编译工具链(由 rtems-source-builder-5.3 手动编译生成) 说明…

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组(变成类似list列表的形状)重复一个数组——np.tile 分组聚集——pandas.…

学习大数据DAY56 业务理解和第一次接入

作业1 1 了解行业名词 ERP CRM OA MES WMS RPA SAAS 了解每个系统的功能和应用 ERP 系统,(Enterprise Resource Planning,企业资源计划系统):ERP 系统 是一种用于管理企业各类资源的软件系统,包括生产管理…

CSS 布局技巧实现元素左右排列

开发中经常会遇到一个场景,使用 CSS 实现一个子元素靠右,其余子元素靠左。 这里总结一下常见的实现方式。 1. flex 布局 flexbox 是一种常用且灵活的布局方式,适合完成这种需求。将父容器设置为 display: flex,然后使用 margin…

未来工业,新质赋能!迈威通信邀您共赴智造盛宴

亲爱的未来智造家们,注意啦!9月24日至28日,一场工业界的璀璨盛会——第24届中国国际工业博览会,即将在国家会展中心(上海)璀璨启幕! 这不仅仅是一场展会,更是一次探索工业未来、体验智能制造魅力的绝佳机会&#xff01…

Lesson08---string类(3)

1.find_first_of string里面的find成员函数就是找一个字符串然后返回第一个字符 find_first_of函数看个例子就很快就能明白 它返回的下标是参数的其中任意一个字符的下标通过以上操作就可以把原来的那一整个字符串替换成自己想要的字符 第二个参数其实就是一个缺省参数默认从0…

CentOS 7 最小化安装后如何安装图形化桌面

CentOS 7 最小化安装后如何安装图形化桌面 一、准备工作1. 登录系统2. 配置网络 二、安装图形化桌面1. 安装 X Window System2. 安装 GNOME 桌面 三、配置默认启动模式1. 查看当前启动模式2. 修改默认启动模式 四、重启系统并验证 💖The Begin💖点点关注…

C语言 | Leetcode C语言题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; char* removeKdigits(char* num, int k) {int n strlen(num), top 0;char* stk malloc(sizeof(char) * (n 1));for (int i 0; i < n; i) {while (top > 0 && stk[top] > num[i] && k) {top--, k--;}stk[top]…

JavaScript web API part2

web API 全选反选案例 需求&#xff1a; 勾选大复选框&#xff0c;勾选全部小复选框取消勾选大复选框&#xff0c;则取消勾选全部小复选框若有小复选框没有被勾选&#xff0c;则大复选框不被勾选若所有小复选框都被勾选&#xff0c;则大复选框被勾选 <!DOCTYPE html>…

【UE5 C++课程系列笔记】02——创建C++类的三种方式

目录 一、从UE编辑器中创建 引用头文件报错的两种解决方式 &#xff08;1&#xff09;方式1 &#xff08;2&#xff09;方式2 二、在文件夹中直接创建 三、在Visual Studio中创建 一、从UE编辑器中创建 在UE编辑器中选择“Tools-》New C Class” 这里新建的类的父类选择…

分类预测|2024年最新优化算法鹦鹉优化器PO|基于鹦鹉优化RELM正则化极限学习机数据分类预测Matlab程序PO-RELM

文章目录 一、基本原理原理流程1. **定义目标函数**2. **初始化POA**3. **评估适应度**4. **更新鹦鹉的位置**5. **更新鹦鹉的状态**6. **重复迭代**7. **选择最佳解** 示例 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 鹦鹉优化算法&#xff08;Parrot Optim…

学习之使用IDEA集成GIT

一、环境准备 1.1 配置git忽略文件 git.ignore 文件模版内容如下: # Compiled class file *.Class#Log file *.log# BlueJ file *.ctxt# Mobile Tools for Java (J2Me) *.mtj.tmp/# Package File *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar.classpath .project .settings…

linux查看外网ipv4地址

在Linux系统中&#xff0c;可以使用以下几种方法来查看外网IPv4地址&#xff0c;并确保强制使用IPv4。 前言 特别感谢浪浪云对本文的大力支持。浪浪云作为领先的云计算服务提供商&#xff0c;凭借其卓越的性能和可靠性&#xff0c;帮助无数企业和开发者实现了业务的快速部署和…

vue之我不会

计算属性 例子&#xff1a; 注意&#xff1a;调用计算属性时&#xff0c;不可以带括号&#xff0c;那样调用的就是方法&#xff0c;如&#xff1a;以下调用fullName时不可funnName() <div id"root">姓&#xff1a;<input type"text" v-model"…

神经网络多层感知器异或问题求解-学习篇

多层感知器可以解决单层感知器无法解决的异或问题 首先给了四个输入样本&#xff0c;输入样本和位置信息如下所示&#xff0c;现在要学习一个模型&#xff0c;在二维空间中把两个样本分开&#xff0c;输入数据是个矩阵&#xff0c;矩阵中有四个样本&#xff0c;样本的维度是三维…

C51单片机-单按键输入识别,键盘消抖

【实验目的】 独立按键的识别方法、键盘消抖等。 【实验现象】 每按一次独立键盘的S2键&#xff0c;与P1口相连的八个发光二极管中点亮的一个往下移动一位。 【实验说明】 关于按键去抖动的解释&#xff0c;我们在手动按键的时候&#xff0c;由于机械抖动或是其它一些非人为的因…