1.1 TextCNN的模型原理

  • Yoon Kim在2014年将卷积神经网络CNN应用到文本分类任务,利用多个不同大小的卷积核来提取句子中的关键信息,从而能够更好地捕捉局部相关性。

1.2 TextCNN的详细过程

  • Embedding:词嵌入层,单词的向量表示
  • Convolution:卷积层,提取单词的特征
  • MaxPolling:池化层,将不同长度句子经过pooling层之后都能变成定长的表示
  • FullConnection:全连接层,输出每个类别的概率

1.3 通道

  • 图像中可以利用 (R, G, B) 作为不同channel

  • 文本的输入的channel通常是不同方式的embedding方式(比如 word2vec或Skip-Gram)

1.4 一维卷积

  • 文本是一维数据,因此在TextCNN卷积用的是一维卷积。

  • 一维卷积需要通过设计不同 kernel_size 的 filter 获取不同宽度的视野。

1.5 代码

  • 步骤一:导入工具库
```python
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
  • 步骤二:模型初始化
    def __init__(self):super(TextCNN, self).__init__()self.num_filters_total = num_filters * len(filter_sizes)self.W = nn.Embedding(vocab_size, embedding_size)self.Weight = nn.Linear(self.num_filters_total, num_classes, bias=False)self.Bias = nn.Parameter(torch.ones([num_classes]))self.filter_list = nn.ModuleList([nn.Conv2d(1, num_filters,(size, embedding_size)) for size in filter_sizes])print(" +++")
  • 步骤三:前向计算
    def forward(self, X):embedded_chars = self.W(X)  # [batch_size, embedding_size, sequence_length]embedded_chars = embedded_chars.unsqueeze(1)  # add channel(=1) [batch, channel(=1), sequence_length, embedding_size]pooled_outputs = []for i, conv in enumerate(self.filter_list):# conv : [input_channel(=1), output_channel(=3), (filter_height, filter_width), bias_option]h = F.relu(conv(embedded_chars))# mp : ((filter_height, filter_width))mp = nn.MaxPool2d((sequence_length - filter_sizes[i] + 1, 1))# pooled : [batch_size(=6), output_height(=1), output_width(=1), output_channel(=3)]pooled = mp(h).permute(0, 3, 2, 1)pooled_outputs.append(pooled)# [batch_size(=6), output_height(=1), output_width(=1), output_channel(=3) * 3]h_pool = torch.cat(pooled_outputs, len(filter_sizes))# [batch_size(=6), output_height * output_width * (output_channel * 3)]h_pool_flat = torch.reshape(h_pool, [-1,self.num_filters_total])model = self.Weight(h_pool_flat) + self.Bias  # [batch_size, num_classes]return model
  • 步骤四:主函数
if __name__ == '__main__':embedding_size = 2  # 词向量的维度sequence_length = 3  # 句子的长度num_classes = 2  # 分类结果filter_sizes = [2, 2, 2]  # 卷积核num_filters = 3  # 通道的数量# 3 words sentences (=sequence_length is 3)sentences = ["i love you", "he loves me", "she likes baseball", "i hate you", "sorry for that", "this is awful"]labels = [1, 1, 1, 0, 0, 0]  # 1 is good, 0 is not good.# 1.建立词汇表word_list = " ".join(sentences).split()word_list = list(set(word_list))word_dict = {w: i for i, w in enumerate(word_list)}vocab_size = len(word_dict)# 2. 构建模型model = TextCNN()criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.001)inputs = torch.LongTensor([np.asarray([word_dict[n] for n in sen.split()]) for sen in sentences])targets = torch.LongTensor([out for out in labels])  # To using Torch Softmax Loss function# 3.训练for epoch in range(5000):optimizer.zero_grad()output = model(inputs)# output : [batch_size, num_classes], target_batch : [batch_size] (LongTensor, not one-hot)loss = criterion(output, targets)if (epoch + 1) % 1000 == 0:print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.6f}'.format(loss))loss.backward()optimizer.step()# Testtest_text = 'sorry hate you'tests = [np.asarray([word_dict[n] for n in test_text.split()])]test_batch = torch.LongTensor(tests)# Predictpredict = model(test_batch).data.max(1, keepdim=True)[1]if predict[0][0] == 0:print(test_text, "is Bad Mean...")else:print(test_text, "is Good Mean!!")

二十四、TextCNN的原理和实现相关推荐

  1. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  2. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  3. SAP UI5 初学者教程之二十四 - 如何使用 OData 数据模型试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  4. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  5. 华为鸿蒙参与者,一起来搞机 篇二十四:不止有鸿蒙,参加华为开发者大会是一种怎样的体验...

    一起来搞机 篇二十四:不止有鸿蒙,参加华为开发者大会是一种怎样的体验 2019-08-19 21:30:00 10点赞 6收藏 4评论 2019年8月9日至11日,HDC.2019华为开发者大会在广东 ...

  6. Power BI(二十四)power pivot之产品/客户分类分析(ABC分析)

    Power BI(二十四)power pivot之产品/客户分类分析(ABC分析) 之前我们介绍过帕累托分析,现在我们使用power pivot进行产品/客户分类分析(ABC分析) 我们就以产品ABC ...

  7. 白话空间统计二十四:地理加权回归(八)结果解读(一)

    地理加权回归分析完成之后,与OLS不同的是会默认生成一张可视化图,像下面这张一样的: 这种图里面数值和颜色,主要是系数的标准误差.主要用来衡量每个系数估计值的可靠性.标准误差与实际系数值相比较小时,这 ...

  8. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  9. 异常处理程序和软件异常——Windows核心编程学习手札之二十四

    异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...

  10. 数字图像处理领域的二十四个典型算法及vc实现、第一章

    数字图像处理领域的二十四个典型算法及vc实现.第一章 作者:July   二零一一年二月二十六日. 参考:百度百科.维基百科.vc数字图像处理. --------------------------- ...

最新文章

  1. FreeBsdb FAMP Lamp环境
  2. 关于报错ImportError: cannot import name ‘AbstractKeyedTuple‘ from ‘sqlalchemy.util._collections‘的解决
  3. 8字箴言:尊重、尽责、开放、创新
  4. 【Python CheckiO 题解】Pawn Brotherhood
  5. php让代码重新运行一次,脚本运行时是否可以动态重新加载PHP代码?
  6. 圆形进度条以及百分率指示器 Scroller类的练习
  7. SpringBoot学习笔记(8):事物处理
  8. UI设计使用模板素材|登录界面设计
  9. String类的编码和解码问题
  10. maven中,xml文件无法编译,想要在Java中写xml文件,需要配置xml信息,另外springBoot设置如何在资源目录下扫描xml文件
  11. TR069协议与商业应用8——移植cwmp到ARM平台运行和测试
  12. 计算机时代前的发明,假如1万人回到150万年前,只带简单工具,多久才能制造出计算机?...
  13. 11.25 AtCoder Beginner Contest 129
  14. u盘server2012服务器系统安装,怎样u盘装windows server2012呢?
  15. 【寒江雪】Unity中调用C++的函数和类
  16. proxy代理服务器,实现跨域
  17. python删除重复单词_Python - 过滤重复的单词
  18. python问卷星 自动答题_问卷星自动答题神器
  19. 2021年scrapy一分钟内爬取笔趣阁整本小说存为txt|解决章节排序问题
  20. matplotlib绘图教程

热门文章

  1. 浅谈ASP.NET Forms验证
  2. linux投屏快捷键,Linux基本指令(持续更新中..)
  3. rabbitmq 如何删除队列中的消息
  4. 不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常
  5. Go的sync.Pool(五)
  6. 服务器系统自带虚拟机吗,现在所说的服务器虚拟化,也就是在vmware虚拟机上搭建的吗...
  7. 各种实用的 PHP 开源库推荐
  8. MySQL中Myisam、InnoDB碎片优化
  9. java jar包详解_Jar打包用法详解
  10. 只下载pycharm不安装python可以用吗_pycharm下怎么配置python