新闻文本分类2.0

鸽了一个多月,终于更新辣,这篇是[基于CNN+GRU的文本分类实践](基于CNN+GRU的文本分类实践 | Rufus的B滚木 (gitee.io))的续集,话不多说,直接进入正题! 经过无数次的尝试,最后发现,还是全连接层坠爽,有奇效。 model.add(Embedding(len(vocab) + 1, 256, input_length=300)) # 使用Embedding层将每个词编码转换为词向量 model.add(Dense(512)) model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Dropout(0.2)) model.add(Dense(256)) model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Dropout(0.2)) model.add(Dense(256)) model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(9, activation='softmax')) 然后,这次做了一个重大的改动,就是把”其他“类去除了, 因为在搜集数据集的时候,发现其他类的数据集根本无从下手,搜集出来,感觉也只是在模型里面充当噪声,然后经过一波冥思苦想,最后决定这样干,把神经网络最后不太确定的,就归作其他类。 那么应该怎样找出“不确定”的数据呢,我想到了利用标准差来解决这个问题,每次神经网络最后输出的是一个9个float类型数字的数组,现在计算这9个数字的方差,如果是机器比较确定的话,这9个数字势必有一个会特别接近1 其他8个数字特别接近0,如果不确定,则可能数据分布会相对平均,经过多次测验,当这九个数字的标准差小于0.25时,神经网络对判定结果的置信程度比较低。 下面是改进之后的detect.py检测 import tensorflow as tf from tensorflow.keras.preprocessing.sequence import pad_sequences import os import pandas as pd import jieba import pickle import numpy as np cw = lambda x: list(jieba.cut(x)) # jieba分词器,对输入文本分词时的必备工具 os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # 为了detect程序的稳定性,还是用cpu进行计算 fr = open('tokenizer', 'rb') # 打开之前已经保存好的词典映射文件 tokenizer = pickle....

June 18, 2021 · 1 min · Rufus

基于CNN+GRU的文本分类实践

前情提要 最近打比赛用到了这个,记录一下,方便以后复用。下面是比赛的要求 赛题简介:介绍整个赛题的实现目标、实用价值、涉及技术和整体要求 新闻发展越来越快,每天各种各样的新闻令人目不暇接,对新闻进行科学的分类既能够方便不同的阅读群体根据需求快速选取自身感兴趣的新闻,也能够有效满足对海量的新闻素材提供科学的检索需求。 赛题业务场景:描述赛题相关的真实企业业务背景。从真实场景中,适当简化或者提炼出适合比赛的赛题场景 赛题以新闻数据为赛题数据,整合划分出如下候选分类类别:财经、房产、教育、科技、军事、汽车、体育、游戏、娱乐和其他共十类的新闻文本数据。选手根据新闻标题和内容,进行分类。输入为新闻的标题和正文内容,输出为新闻的分类。 说了这么多,实际上就是要解决一个文本十分类的问题,下面是题目中给出的数据集。如图所示,数据集被分成了很多sheet,每一张sheet对应了一类新闻,其中有三列,分别是新闻内容、新闻分类、新闻标题但是这样的数据集我们还用不了,于是我进行了如下处理。将所有数据合并到同一张表下,再导出为以制表符分隔的txt文件经过观察发现,数据存在许多空缺,如有的新闻只有标题没有内容,这些问题我将在后面的代码中解决。 首先还是import相关模块 from sklearn.model_selection import train_test_split import jieba from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences from sklearn import preprocessing from tensorflow.python.keras.utils.np_utils import to_categorical import pandas as pd from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Embedding, Conv1D, MaxPooling1D, BatchNormalization, LeakyReLU, GRU from tensorflow.keras.layers import Flatten, Dropout import tensorflow as tf import numpy as np import os import matplotlib....

April 9, 2021 · 2 min · Rufus

yolov5试玩

来源 从网上的博客无意看到了yolov5网络,感觉十分神奇,其在前几代的基础上提升超大。下面来简单介绍下怎么白嫖调用,顺便记录一下,以后供自己参考。 环境安装 环境使用的是CUDA11.0 + pytorch1.8.1。代码是从github仓库上直接下载的,这是下载的仓库链接 下好了之后解压就OK,下面是代码文件解压完成后的界面。 因为现在下载的代码只是一个模型,还没有之前训练好的参数,于是我们还要再下载权重文件,这是权重文件的下载链接 提取码:f562 下载好后把权重文件解压到weights里面去然后如果按照网上的教程还需要打开Anaconda Prompt安装依赖(我也试了试,但是会报错,这里存疑) pip install -U -r requirement.txt (慎用)!! 然后打开detect.py,直接运行,程序会把yolov5-master/data/images里面的图片、视频加上识别的框框,输出到yolov5-master/runs/detect/exp里面。 下面是运行结果,我们可以看到,程序调用了GPU加速,将yolov5-master/data/images里面的文件进行逐个转化。 Backend Qt5Agg is interactive backend. Turning interactive mode on. Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', exist_ok=False, img_size=640, iou_thres=0.45, name='exp', nosave=False, project='runs/detect', save_conf=False, save_txt=False, source='data/images', update=False, view_img=False, weights='yolov5s.pt') YOLOv5 2021-3-30 torch 1.8.1 CUDA:0 (GeForce RTX 3070, 8192.0MB) Fusing layers... Model Summary: 224 layers, 7266973 parameters, 0 gradients, 17.0 GFLOPS image 1/3 C:\Users\1\Desktop\AIProject\yolov5-master\data\images\0_5b320ea307eed_600.jpg: 640x640 1 cup, 3 books, Done....

March 30, 2021 · 1 min · Rufus

“用CNN网络实现树叶样态的分类”

数据集简介 数据集中树叶的样子有四种,分别为锈病,健康,黑腐,黑星四个种类,而我们要做的工作。就是让机器使用神经网络学习给定的树叶数据集,实现对不同样态的特征提取。然后我们再利用训练好的神经网络,投喂新的树叶图片,让机器自己划分其样态的种类,实现机器识别叶子的智能操作。 将数据集打包分类后,变成traindata和testdata两个数据集。以及对应的train_label和test_label. 代码部分 当时这个项目是在笔记本上完成的,环境是tensorflow2.1.0,话不多说直接上代码 import os import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from PIL import Image from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置相关路径 train_txt = './second/train_label.txt' x_train_savepath = './second/model_x_train.npy' y_train_savepath = './second/model_y_train.npy' test_txt = './second/test_label.txt' x_test_savepath = './second/model_x_test.npy' y_test_savepath = './second/model_y_test.npy' checkpoint_save_path = "./checkpoint/model_data.ckpt" # 为数据增广的方法设置参数 图中分别设置了随机旋转,水平/垂直的平移变换,和缩放变换等等 image_gen_train = ImageDataGenerator( rotation_range=90, width_shift_range=.15, height_shift_range=.15, zoom_range=0.5 ) # 设置函数:从label中找到文件路径,读取文件到返回参数x中,并设置返回参数y_作为相应标签 def generateds(txt): f = open(txt, 'r') # 以只读形式打开txt文件 contents = f....

March 27, 2021 · 3 min · Rufus

“择栖工作室招新”

题目 下列Python程序生成了三维空间中的一系列点,获得了坐标x、y、z,他们的分布可以使用一个平面去近似,本质上就是一个三维的线性回归问题:Z=aX+bY+c。其中a、b和c即为我们需要通过机器学习去获得的量。 要求使用梯度下降算法,使用任意方式去实现这一算法,完成对于我们所给出的data_creater_3d函数所生成的数据的拟合。 解法 题目的要求就是用一个三维平面去拟合一系列三维空间里的坐标点,总题思路就是,先随机生成一个平面,再利用最小二乘法,构造所有点与平面的差值,构造损失函数,再利用梯度下降调整参数,得到最优解。 (PS:博主的能力有限,代码可能存在不少待改进的地方,恳请各路大佬指正) import numpy as np import tensorflow as tf #题目自带创建随机点的函数 def data_create_3d(w1, w2, b, amount, size, turb): X = np.random.normal(size=(amount, 2), scale=size) w = np.array((w1, w2)) delta = np.random.normal(size=amount, scale=size) * turb y = np.dot(X, w) + b + delta return X[:, 0], X[:, 1], y print("目标值->","w1:", 2, "w2:", 3, "b:", 20) #得到各点的值 x, y, z = data_create_3d(2, 3, 20, 1000, 10, 3) #构造损失函数f def loss(w1, w2, b): f = 0 for i in range(0, 1000): f += (w1*x[i]+w2*y[i]+b-z[i])**2 f / 1000 return f if __name__ == "__main__": #构造变量 原函数为y=w1x+w2z+b w1=tf....

March 25, 2021 · 2 min · Rufus