Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

关联规则--Apriori算法

发表于 2021-11-13 | 分类于 算法

关联规则

啤酒与尿布的故事:

在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,超市也因此发现了一个规律,在购买婴儿尿布的年轻的父亲们中,有30%~40%的人同时要买一些啤酒。超市随后调整了货架的摆放,将尿布和啤酒放在一起,因此,明显增加了销售额。

兴趣度度量

1、兴趣度度量的概念

挖掘出的模式(规律的表示形式)的简洁性、确定性和实用性即为兴趣度度量。

2、兴趣度度量的必要性

大量的数据 –> 挖掘出大量的规则 –> 规则一小部分是用户感兴趣的 –> 有必要进行兴趣度度量

3、兴趣度度量方法

简洁性度量:模式的便于人理解的度量

确定性度量:模式的可信性

方法:对于关联规则,确定性度量使用置信度。

设A和B为项目集合,A与B关联的规则A–>B的置信度定义为:

置信度(A–>B)= 同时包含A和B的元组数/包含A的元组数

举例:对某计算机商店购买物品的相关情况进行挖掘,得到一个置信度为85%的关联规则:

buys(X,”computer”) –> buys(X,”printer”)

意味着买计算机的顾客85%也买打印机。A的元组数为买计算机的事务数(顾客数),同时包含A和B的元组数为买计算机同时又买打印机的事务数(顾客数)。

实用性度量:模式的有用性

方法:对于关联规则,实用性度量使用支持度。

设A和B为项目集合,A与B关联的规则A”B的支持度定义为:

支持度(A–>B)= 同时包含A和B的元组数/元组总数

举例:对某计算机商店购买物品的相关情况进行挖掘,得到一个支持度为30%的关联规则:

buys(X,”computer”) –> buys(X,”printer”)

意味着该计算机商店的所有顾客的30%同时购买了计算机和打印机。元组总数为购买计算机或购买打印机的事务数(顾客数),同时包含A和B的元组数为买计算机同时又买打印机的事务数(顾客数)。

阅读全文 »

关于神经网络的一些调参经验

发表于 2021-11-03 | 分类于 深度学习

关于神经网络的一些调参经验

训练损失不下降

关于训练损失不下降,根据我的一些经验和理论知识,可以从以下角度来分析

首先,从数据集来分析:

  • 是否数据集存在比较多的标注错误?
  • 针对类似分类的项目,是否数据集分布不均衡,某些类别的样本数量太少?
  • 数据集特征不明显,举个验证码的例子,很多字符类的验证码,为了不让别人破解,会加上背景、斑点和干扰线等,如果这些干扰元素影响很大,人类肉眼分辨都存在难度,那直接丢给神经网络学习也是很难的,你需要想办法去除干扰元素,使数据特征尽可能的明显。

其次,从数据预处理来分析:

  • 是否未进行归一化,比如图片像素值是否除以255;
  • 是否未打乱数据集,不打乱数据集的话,会导致网络在学习过程中产生一定的偏见问题;
  • 是否正确对应数据和标签,比如在预处理后将训练数据和标签输入到神经网络时,因为写了个bug,导致对应错乱;

最后,从模型结构和参数来分析:

  • 激活函数、损失函数是否选错了?

  • 优化器和学习速率不合适,需要调整;

  • 模型结构太简单,学习能力不够;

  • 正则化过度,L1、L2和dropout是用来防止过拟合的,如果训练集loss下不来时,就要考虑一下是不是正则化过度,导致模型欠拟合;

  • Batch_Size过大会导致收敛很慢,损失下降也就很慢,给人一种训练损失不下降的感觉;

  • 模型训练遇到瓶颈

    这里的瓶颈一般包括:梯度消失、大量神经元失活、梯度爆炸和弥散、学习率过大或过小等。

阅读全文 »

使用Pytorch识别字符验证码

发表于 2021-09-23 | 分类于 深度学习

使用Pytorch识别字符验证码

之前已经学习过利用Keras搭建神经网络模型来识别字符验证码,近期又学习了pytorch实现卷积神经网络相关的技术,正好遇到一个验证码识别的需求,所以尝试使用pytorch来实现。

数据预处理

要训练的验证码如下所示:

其为中文汉字的简单运算,实际上仅包括零壹贰叁肆伍陆柒捌玖加减乘等于,这15个汉字,等于可以不识别(其实识别也完全没问题,只不过问题能简化就尽量简化嘛),那最后也就是总共要识别13个汉字,分类数就是13。

另外我们可以用’0123456789+-x’来代替汉字,避免文件名称无法使用汉字(windows下open-cv不能读取带有中文路径或文件名称)的问题。

下载并标注了1000张验证码,观察其字体颜色和干扰线、点均多变,无法根据特定规则将其区分;另外,尝试中值模糊、均值模糊和高斯模糊,均得不到较好的效果(肉眼观察)。只有灰度化和二值化后,感觉稍微变得清晰了一些。

另外,针对数据集我还统计了一下各个类别的数量是否均衡(主要怕有的文字训练样本太少,训练效果差)。

1
2
{'捌': 206, '减': 346, '肆': 220, '柒': 205, '零': 200, '伍': 214, '加': 358, 
'玖': 189, '壹': 195, '叁': 191, '陆': 206, '乘': 297, '贰': 176}

数据集的分布情况如上数据,总体还算均衡,那就表示可以开始处理数据和进行训练了。

阅读全文 »

中文点选验证码——语序

发表于 2021-09-10 | 分类于 自然语言处理

中文点选验证码——语序

前面一直在研究文字点选验证码的文字识别,在文字识别之后,对于有语序要求的,还需要我们自己去按照正确的语序顺序去点击才能通过,例如:

外圆内方

积少成多

得道者多助

利用结巴分词技术可以解决此问题,但是仅限于词语效果较好,对于古诗或者谚语等效果比较差;其中还借助了结巴分词得dict.txt,其中保存了常见词得词频和词性,在使用得时候可以根据自己的需求进行调整。

阅读全文 »

利用CRNN进行文字识别

发表于 2021-08-28 | 分类于 深度学习

CRNN

参考文章:https://xiaobaibubai.blog.csdn.net/article/details/115862743

GitHub项目:https://github.com/meijieru/crnn.pytorch

预训练模型下载地址:https://pan.baidu.com/s/1pLbeCND

CRNN 全称为 Convolutional Recurrent Neural Network,主要用于端到端地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别。

该算法出自An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Secene Text Recognition,这篇文章来自华中科技大学白翔团队,并在2017年被人工智能顶级期刊《TPAMI》收录。

CRNN网络架构示意图

阅读全文 »

关于中文点选验证码的识别

发表于 2021-08-14 | 分类于 深度学习

关于中文点选验证码的识别

背景描述

之前对yolov3学习了挺多,包括Keras和Pytorch版本的框架代码都有使用过,而且还针对网易易盾的滑块验证码做过训练和识别,因为整体上所有滑块仅可看作一类目标,所以任务比较简单;接下来打算对网易易盾的文字点选验证码进行尝试,其中又分为有语序要求和无语序要求的两类。

无语序要求

无语序要求的就是一张验证码图片上给4~5个字,然后再给你三个字,让你按顺序点击。

有语序要求

有语序要求的就是一张验证码图片上给4~5个字,但是不再直接给出让你点击的文字,而是让你根据语义顺序点击,一般是一个成语(词语)或古诗(古文里的句子,比如这里”感时花溅泪”),成语的话比较简单,利用结巴分词一般就可以解决,古诗不太好弄。

解决方案

阅读全文 »

Pytorch-yolov3项目使用总结

发表于 2021-07-23 | 分类于 深度学习

前言

本文主要的参考资料和github项目如下:

Could not find the Qt platform plugin windows错误解决方法:

https://blog.csdn.net/DonetRen/article/details/106437538

pytorch版yolov3训练自己数据集:

https://www.cnblogs.com/pprp/p/10863496.html

https://blog.csdn.net/qq_38587510/article/details/106019905

https://blog.csdn.net/qq_39056987/article/details/104327638

github项目:

labelImg:https://github.com/tzutalin/labelImg

yolov3:https://github.com/ultralytics/yolov3(master是`yolov5`,archive是`yolov3`)

labelImg

安装PyQt5和lxml就可以运行了,运行可能会需要配置环境变量

具体参考文章:https://blog.csdn.net/DonetRen/article/details/106437538

数据标注的方式和数据集分割的方式(划分为训练集、验证集和测试集)与keras-yolov3项目是一样的,但是数据格式转换的操作有所不同,pytorch-yolov3项目中没有keras项目中的voc_annotation.py用来转换数据格式,需要使用以下代码来完成操作。

阅读全文 »

YOLOV1、V2、V3 理论篇

发表于 2021-07-17 | 分类于 图像处理

YOLOV1、V2、V3 理论篇

YOLOV1核心思想

yolo论文地址

这部分参考文章地址:https://blog.csdn.net/litt1e/article/details/88814417

作者在YOLO算法中把物体检测(object detection)问题处理成回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box(边框)和类别概率。

算法首先把输入图像划分成S×S的格子,然后对每个格子都预测B个bounding boxes,每个bounding box都包含5个预测值:x,y,w,h和confidence。
x,y就是bounding box的中心坐标,与grid cell对齐(即相对于当前grid cell的偏移值),使得范围变成0到1;
w,h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围)。
confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息

换句话说,如果ground truth(人工标注的框,更一般化的理解为训练集标签)落在这个grid cell里,那么Pr(Object)就取1,否则就是0,IOU就是bounding box与实际的groud truth之间的交并比(所谓交并比就是这两个框相交的面积除以两个框并起来的面积)。confidence是这两者的乘积。

在yolov1中作者将一幅图片分成7x7个网格(grid cell),由网络的最后一层输出7×7×30的tensor,也就是说每个格子输出1×1×30的tensor。30里面包括了2(B=2)个bound ing box的x,y,w,h,confidence以及针对格子而言的20个类别概率,输出就是 7x7x(5x2 + 20) 。
(通用公式: SxS个网格,每个网格要预测B个bounding box还要预测C个categories,输出就是S x S x (5×B+C)的一个tensor。 注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的)

v1使用的Backbone是GoogLeNet,带有全连接层,使用224*224的分辨率训练图像,但是输入图像要求448*448的尺寸。

YOLOV2重要升级

阅读全文 »

PyTorch实现卷积神经网络

发表于 2021-07-04 | 分类于 深度学习

PyTorch实现卷积神经网络

关于卷积神经网络的一些基础知识和概念等前面已经多次学习,这篇文章的重点是Pytorch来实现卷积神经网络,偏向于代码实践,理论知识不多,不过有一点关于图像经过卷积后的输出尺寸问题的公式我觉得不错,值得记录。

卷积层

我们知道卷积的过程是:让卷积核在图片上依次进行滑动,滑动方向为从左到右,从上到下,每滑动一次,卷积核就与其滑窗位置对应的输入图片x做一次点击运算并得到一个数值。在卷积的过程中,一般情况下,图片的宽高会变得越来越小,而通道数会变得越来越多。这里尺寸改变有什么样的规律呢?

输入1*7的向量,经过1*3的卷积,如果步长为2,最终得到一个1*5的向量;如果步长为2,最终得到一个1*3的向量

输入7*7的向量,经过3*3的卷积,如果步长为1,最终得到一个5*5的向量;如果步长为2,最终得到一个3*3的向量;如果步长为3,会报错

上面的例子卷积核个数都是1且通道数也是1,下面考虑多个卷积核的情况

输入32*32*3的图片,如果kernel大小为5*5*3(实际上大小就是5*5,后面的3只是为了表示针对3通道图片的一种写法,卷积核会对三个通道分别实行5*5卷积,然后加到一起),单个卷积核和步长为1的情况下,最终得到一个28*28*1的新图片;如果我们连续堆叠6个不同的卷积,最终特征层将得到6个通道,即28*28*6的新图片。

,在7*7的输入图片周边做一个像素的填充(pad=1,周边填充是上下左右都会填充),如果步长为1,kernel为3*3的卷积输出的特征层为7*7。

阅读全文 »

PyTorch实现神经网络图像分类

发表于 2021-06-26 | 分类于 深度学习

PyTorch实现神经网络图像分类

本文章主要参考《深度学习与图像识别 原理与实践一书》

上篇文章介绍了KNN分类算法,并用其来实现MNIST和Cifar10数据集的分类任务,这篇文章同样是做这两个数据集的分类,但是使用的Pytorch构建神经网络算法来完成实验,是我自己对Pytorch的一个初步学习。

之前一直是使用Keras,之所以学习Pytorch是因为,Keras比较适合作为练习使用的深度学习框架,因为其过度的封装导致学习时无法理解深度学习的真正内涵。

PyTorch的使用

Tensor

Tensor是Pytorch中的基础组件,Tensor与Numpy中的ndarrays非常类似,但是Tensor可以使用GPU加速而ndarrays不可以。在pytorch下使用如下命令来进行GPU运算:

1
2
3
4
5
6
import torch

if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
print(x+y)

x和y为Tensor类型的数据,如果电脑无GPU,则无法进行GPU运算。

Terson与Numpy互相转换

1
2
3
4
5
6
7
8
9
10
11
import torch
import numpy as np

np_data = np.arange(8).reshape((2, 4))
# 将numpy数组转换为tensor结构
torch_data = torch.from_numpy(np_data)
print(np_data)
print(torch_data)
# 转回numpy
np_data2 = torch_data.numpy()
print(np_data2)

Tensor做矩阵运算(矩阵相乘)

阅读全文 »
1…678…12
chenxi

chenxi

120 日志
12 分类
224 标签
Links
  • Docle
  • Swift
© 2025 chenxi
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4