基于 OpenCV 与 sklearn 的数字识别:KNN 算法实践

sklearn代码4 3-KNN手写数字的识别 import numpy as np import cv2 import matplotlib.pyplot as plt %matplotlib inline from sklearn.neighbors import KNeighborsClassifier # bitmap 位图 digit = cv2.imread('./u=123514531,1306365842&fm=26&fmt=auto.bmp') plt.imshow(digit) # 将(三维的)彩色图片转换 阅读详情

在计算机视觉领域,数字识别是一个经典问题,广泛应用于邮政编码识别、车牌识别等场景。本文将介绍如何使用 OpenCV 进行图像处理,并结合 KNN(K 近邻)算法实现数字识别,同时对比 OpenCV 内置 KNN 与 scikit-learn 库中 KNN 的实现差异。

准备工作

首先,我们需要导入所需的库:

import numpy as np
import cv2
from sklearn.neighbors import KNeighborsClassifier

其中,numpy用于数值计算,cv2(OpenCV)用于图像处理,KNeighborsClassifier则是 scikit-learn 库中的 KNN 分类器。

图像读取与预处理

我们需要读取两张图像:一张包含大量数字样本的训练图像,另一张作为测试图像。

# 读取训练图像和测试图像
img = cv2.imread(r'D:\pythonProject11\class\aa.png')
c_img = cv2.imread(r'D:\pythonProject11\class\ccc.png')

# 将彩色图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
c_gray = cv2.cvtColor(c_img, cv2.COLOR_BGR2GRAY)

彩色图像包含 RGB 三个通道,转换为灰度图像可以减少计算量,同时保留图像的主要特征。cv2.cvtColor函数用于颜色空间转换,COLOR_BGR2GRAY参数表示从 BGR 格式(OpenCV 默认的彩色图像格式)转换为灰度格式。

数据准备

图像分割

我们假设训练图像是一个包含 50 行 100 列数字的网格图像,每个数字占据一个 20×20 像素的区域。我们需要将这个大图像分割成多个小图像,每个小图像对应一个数字样本。

python

运行

# 先垂直分割成50行,再对每行水平分割成100列
cell = np.array([np.hsplit(row, 100) for row in np.split(gray, 50)])

这里使用了np.split和np.hsplit两个函数:

  • np.split(gray, 50)将灰度图像垂直分割成 50 个等高度的子数组
  • np.hsplit(row, 100)将每个子数组水平分割成 100 个等宽度的子数组

最终得到的cell是一个形状为 (50, 100, 20, 20) 的数组,表示 50 行 100 列,每个元素是 20×20 像素的数字图像。

训练集和测试集划分

我们将前 50 列作为训练集,后 50 列作为测试集:

python

运行

# 划分训练集和测试集
train_ma = cell[:, :50]  # 前50列作为训练集
test_ma = cell[:, 50:100]  # 后50列作为测试集

# 转换为二维数组(样本数×特征数)
train_ma = train_ma.reshape(-1, 400).astype(np.float32)  # 50×50=2500个样本,每个样本20×20=400个特征
test_ma = test_ma.reshape(-1, 400).astype(np.float32)

reshape(-1, 400)将每个 20×20 的图像转换为一个长度为 400 的一维数组,便于作为机器学习算法的输入。-1表示自动计算该维度的大小,这里计算结果为 2500(50×50)。

标签生成

我们需要为每个样本生成对应的标签(即该样本对应的数字)。假设图像中的数字是按 0-9 的顺序重复排列的:

python

运行

# 生成标签
kernel = np.arange(10)  # 生成0-9的数字
train_la = np.repeat(kernel, 250)[:, np.newaxis]  # 每个数字重复250次,形成2500个标签
test_la = np.repeat(kernel, 250)[:, np.newaxis]

np.repeat(kernel, 250)将 0-9 每个数字重复 250 次,得到一个长度为 2500 的数组,与我们的样本数量一致。[:, np.newaxis]将一维数组转换为二维列向量,以满足 OpenCV 中 KNN 算法对标签格式的要求。

测试图像预处理

我们需要对测试图像进行同样的预处理:

python

运行

# 预处理测试图像
c_test = np.array(c_gray).reshape(-1, 400).astype(np.float32)

使用 OpenCV 的 KNN 进行识别

OpenCV 库中内置了 KNN 算法的实现:

python

运行

# 创建并训练OpenCV的KNN模型
knn = cv2.ml.KNearest_create()
knn.train(train_ma, cv2.ml.ROW_SAMPLE, train_la)  # ROW_SAMPLE表示每行是一个样本

# 预测
ret, results, neigh, dist = knn.findNearest(c_test, 4)  # 寻找4个最近邻
print("OpenCV KNN预测结果:", results)

cv2.ml.KNearest_create()创建一个 KNN 模型实例,train方法用于训练模型,findNearest方法用于预测。findNearest的第二个参数表示要寻找的最近邻数量 K。

使用 scikit-learn 的 KNN 进行识别

我们也可以使用 scikit-learn 库中的 KNN 实现:

python

运行

# 为scikit-learn准备标签(一维数组)
train_la = np.repeat(kernel, 250)
test_la = np.repeat(kernel, 250)

# 创建并训练scikit-learn的KNN模型
knnl = KNeighborsClassifier(n_neighbors=5)  # K=5
knnl.fit(train_ma, train_la)

# 评估模型准确率
a = knnl.score(test_ma, test_la)
print("模型准确率:", a)

# 预测
b = knnl.predict(c_test)
print("scikit-learn KNN预测结果:", b)

scikit-learn 的 KNN 使用起来更加简洁,KNeighborsClassifier的n_neighbors参数指定 K 值,fit方法用于训练,score方法用于评估模型准确率,predict方法用于预测。

总代码

import numpy as np
import cv2
from sklearn.neighbors import KNeighborsClassifier
img = cv2.imread(r'D:\pythonProject11\class\aa.png')
c_img = cv2.imread(r'D:\pythonProject11\class\ccc.png')
# c_img = cv2.imread('img_1.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转化为灰度图像
c_gray = cv2.cvtColor(c_img,cv2.COLOR_BGR2GRAY)
c_test = np.array(c_gray).reshape(-1,400).astype(np.float32)

cell =np.array([np.hsplit(row,100) for row in
             np.split(gray,50)])
train_ma = cell[:,:50]
test_ma = cell[:,50:100]
train_ma = train_ma.reshape(-1,400).astype(np.float32)
test_ma = test_ma.reshape(-1,400).astype(np.float32)
kernel = np.arange(10)
train_la = np.repeat(kernel,250)[:,np.newaxis]#cv2的方法
test_la = np.repeat(kernel,250)[:,np.newaxis]
knn = cv2.ml.KNearest_create()
knn.train(train_ma,cv2.ml.ROW_SAMPLE,train_la)#cv2.mL.ROW_SAMPLE:这是一个标志,告诉0pencv训练数据是按行组织的,即每一行是一个样本。
ret, results, neigh, dist = knn.findNearest(c_test,4)
print(results)
train_la = np.repeat(kernel,250)#sklearn的方法
test_la = np.repeat(kernel,250)
knnl = KNeighborsClassifier(n_neighbors=5)
knnl.fit(train_ma,train_la)
a=knnl.score(test_ma,test_la)
b=knnl.predict(c_test)
print(a,b)

两种实现的对比

  1. 接口设计:OpenCV 的 KNN 接口更偏向于计算机视觉领域的使用习惯,而 scikit-learn 的接口则更符合机器学习的通用范式。

  2. 输入格式:OpenCV 的 KNN 要求标签是列向量,而 scikit-learn 的 KNN 要求标签是一维数组。

  3. 功能:scikit-learn 的 KNN 提供了更多的评估方法和参数设置,而 OpenCV 的 KNN 则更轻量,与图像处理功能结合更紧密。

  4. 结果:在相同的 K 值设置下,两种实现的预测结果应该是相似的,但可能会因为具体实现细节的不同而略有差异。

总结

本文介绍了如何使用 OpenCV 进行图像预处理,以及如何使用 KNN 算法实现数字识别。通过对比 OpenCV 和 scikit-learn 中 KNN 的实现,我们可以看到不同库在接口设计和使用方式上的差异。

在实际应用中,我们可以根据具体需求选择合适的库和算法。如果需要处理图像并进行简单的分类,OpenCV 的 KNN 可能是一个不错的选择;如果需要更复杂的机器学习功能和更全面的评估方法,scikit-learn 则更为适合。

此外,KNN 算法虽然简单易懂,但在处理大规模数据集时效率较低。在实际应用中,我们可能需要考虑使用更高效的算法,如 SVM、神经网络等,以获得更好的性能。

Python scikit-learn 学习笔记—手写数字识别 这是一个手写数字的识别实验,是一个sklearn在现实中使用的案例。原例网址里有相应的说明和代码。   首先实验的数据量为1797,保存在sklearn的dataset里。我们可以直接从中获取。每一个数据是有image,target两部分组成。Image是一个尺寸为8*8图像,target是图像的类别,在我们看来类别就是手写的数字0-9.   代码一开始,将数据载入。 # Standard 阅读详情

相关推荐

KNN算法实现手写数字识别:从原理到实践完整指南

K近邻(KNN)是一种经典的监督学习算法,其核心原理基于“物以类聚”的思想,通过计算样本间的距离进行分类。该算法无需显式训练模型,而是直接存储训练数据,在预测时通过距离度量和投票机制做出决策。在技术价值上,KNN以其简单直观、易于理解和实现的特点,成为机器学习入门和实践教学的首选案例,尤其适合展示从数据加载到模型评估的完整工作流。在应用场景方面,它常被用于图像分类、模式识别等任务,例如手写数字识别项目。本文以MNIST数据集为例,详细介绍了如何使用KNN算法构建手写数字识别模型,涵盖了环境搭建、代码实现、效

weixin_34228387的博客 372

如何用python-sklearn库结合opencv库识别图像

运用sklearn库中的svc模型进行对图片识别结果预测,通过SVC(probability = True)来做实时结果预测,以下是将要运用的库,在这个项目中,需要将12张数字2和12张数字3进行区分识别。

PAQQ的博客 750

在OpenCV里使用机器学习库sklearn 实现手写数字识别1

前面学习过KNN的方式来实现手写数字识别,不过效果一般,那么有没有别的方法来试一试,或许可以改进一点呢。在本文里将要介绍使用SVM和HOG的方式来实现手写数字识别,比如最终结果如下图: 在这个例子里与前面《在OpenCV里用kNN实现手写数字识别》大体流程是一样的,主要区别在于这里采用skimage、sklearn库的功能,使用LinearSVC来进行训练和识别分类。因此在学习本文之前,先要...

大坡3D软件开发 1074

使用OpenCV和KNN算法进行手写数字识别

在计算机视觉和机器学习领域,手写数字识别是一个经典的问题,广泛应用于各种实际场景,如邮政编码识别、银行支票处理等。KNN(K-Nearest Neighbors)算法因其简单易懂、无需复杂模型训练而被广泛应用于此类任务。本文将通过一个具体的案例,展示如何使用Python、OpenCV和实现KNN算法,并对手写数字进行识别和准确率评估。

www_pp_的博客 513

基于OpenCV的电表LED数码管读数识别:传统图像处理实战

光学字符识别(OCR)是计算机视觉领域的基础技术,旨在将图像中的文字转换为可编辑的文本数据。其核心原理在于通过图像预处理、特征提取和模式识别等步骤,实现对字符的自动化读取。在工业视觉和物联网数据采集中,OCR技术展现出巨大价值,尤其适用于仪表读数、产品编码等场景。然而,通用OCR引擎在面对特定场景如高对比度、发光显示的LED数码管时,往往因字体、光照等差异而表现不佳。本文聚焦于利用OpenCV图像处理库,针对电表LED数码管读数这一具体应用,详细阐述了从图像预处理、数字区域定位、字符分割到最终识别的完整技术

weixin_33922672的博客 399

本科生可用的OpenCV人脸识别完整方案

人脸识别是计算机视觉入门核心任务,其本质是通过图像处理与模式识别技术实现身份判别。基于OpenCV的传统流水线(Haar检测+LBP特征+KNN分类)因其轻量、可解释、低依赖特性,成为高校课程设计首选方案。该技术无需GPU,仅需Python基础环境即可部署,兼顾实时性(≥8fps)、准确率(≥92%)与鲁棒性(支持光照变化、轻微遮挡)。典型应用场景包括课堂考勤演示、课程设计答辩、嵌入式视觉实验等教学实践环节。本方案特别强化python环境可控、opencv调用稳定两大痛点,提供从数据采集、训练、识别到可视化

cuiji1279的博客 301

机器学习——KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)

digit3 = cv2.imread('digit3.png') #图片中的数字是3digit6 = cv2.imread('digit6.png') #图片中的数字是6读取两张额外图像digit3.png和digit6.png。将其转换为灰度、再reshape成与训练数据一致的(1, 400)形状。使用模型预测数字类别。我们用 KNN 成功实现了手写数字的分类识别,关键步骤包括:图像预处理和切分标签构造与数据 reshape使用建模预测未知图像的数字类别。

2302_78022640的博客 1446

基于OpenCV与PyQt的笔迹识别系统:从图像处理到桌面应用开发

图像识别是计算机视觉领域的核心技术,其原理在于通过算法提取并分析图像中的特征信息,进而实现分类与识别。这项技术的核心价值在于将视觉信息转化为可计算、可比较的数据,广泛应用于安防、医疗、工业质检等多个场景。在众多应用分支中,笔迹识别作为一个经典的模式识别问题,专注于分析和鉴别书写者的个人风格,在司法鉴定、身份验证等领域具有重要价值。本文聚焦于利用OpenCV这一强大的计算机视觉库,结合PyQt桌面开发框架,构建一个完整的笔迹识别系统。系统涵盖了从图像预处理(如灰度化、二值化、降噪)、到特征工程(提取轮廓、网格

weixin_34214500的博客 761

机器学习算法系列专栏:K近邻(KNN)算法(初学者)

它的核心思想是通过已知的训练数据集中的最近邻点来推断未知数据点的类别或数值。为了判断两个样本之间的相似程度,KNN常用欧氏距离(Euclidean Distance),曼哈顿距离(Manhattan Distance)或其他形式的距离函数来进行测量。(1)欧氏距离:是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。对于一个新的输入实例,KNN会在训练数据集中找到与其距离最近的K个实例(称为“邻居”),如果用于。鸢尾花训练数据.xlsx。

2301_79749195的博客 2670

基于OpenCV的传统车牌识别系统:从图像预处理到字符识别的完整实现

计算机视觉是人工智能领域的关键分支,其核心原理在于让机器“看懂”图像内容。传统图像处理技术通过一系列可解释的算法步骤(如滤波、边缘检测、形态学操作)提取和增强图像特征,为后续分析奠定基础。这些技术在工业检测、安防监控等领域具有重要价值,尤其在资源受限或需要高可控性的场景中。车牌识别系统是计算机视觉的经典应用,它完整地展示了从图像输入到文本输出的完整流水线。本文以OpenCV和Python为工具,详细拆解了车牌识别的四大核心步骤:图像预处理与增强、车牌区域定位、字符分割以及字符识别。其中,图像预处理通过灰度化

weixin_33841503的博客 420

Macbook Pro Bootcamp 安装触控板驱动mac-precision-touchpad在Windows系统下实现更好的触控板操作

由于很多软件的限制,所以不得不在Windows和MacOS之间进行切换,然而,Windows下虽然Bootcamp提供了触控板的驱动,然而只能实现简单的上下滑动和点击等操作,而且在滑动页面的时候滑动非常不流畅,体验极差。 今天无意间发现了一款第三方撰写的驱动,可以较为完美地实现Macbook笔记本在Windows系统下的触控板操作支持,通过在我的2015款Macbook Pro(A1502)进行安装测试,感觉体验很不错,在这里分享给大家。 驱动来自于Github上的imbushu,他的项目地址如下: htt

博客 1万+

用机器学习sklearn+opencv-python过简单的4位数字验证码

在本节我们将使用sklearn和opencv-python这两个库过掉简单的4位数字验证码,验证码风格如下所示。

热爱代码 1658

IntelliJ IDEA 2025.1 + Gradle 镜像配置避坑指南:解决依赖下载慢的终极方案

本文针对IntelliJ IDEA 2025.1开发环境中Gradle依赖下载缓慢的问题,提供了详细的镜像配置避坑指南。通过解析Gradle依赖解析机制,重点指导如何正确配置阿里云等国内镜像仓库,并分享验证配置生效、排查常见错误及高级优化技巧,旨在彻底解决依赖下载难题,提升开发效率。

weixin_28835551的博客 532

用机器学习sklearn+opencv-python过计算型验证码

在本节我们用Pillow库生成了计算型验证码图片,相较于纯数字或数字+字母验证码,计算型验证码识别难度要高一点,主要原因在于计算型验证码上的字符数量不一,导致图像切割难度会增加很多。虽然识别出字符后还要计算,但其实字符只要被识别出来的话,计算也就不是什么问题。当然,本节使用的验证码图片在干扰度上还不是特别强,没有加入线条干扰,如果加上线条的话,难度会大很多,因为在图像处理时,很可能会把运算符也给磨平了,导致识别出来的轮廓数量不对。模型也有可能会把一些干扰线条识别成1或者除号/了。

热爱代码 2895

SMR实战指南:从GWAS数据到eQTL分析的完整流程

本文提供了基于汇总数据的孟德尔随机化(SMR)实战指南,详细解析了如何从GWAS汇总数据出发,整合eQTL数据,完成从数据准备、BESD格式转换到最终SMR与HEIDI分析的完整流程。文章重点阐述了核心操作步骤、常见避坑技巧与结果解读,旨在帮助遗传学研究者高效掌握这一分析基因表达与复杂性状潜在因果关系的强大工具。

weixin_29246195的博客 1068

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

帮助你解决在使用CMT2300A 时遇到的各种问题,若有需要,请及时与我交流

teleger的博客 1429

KNN算法实战:从原理到代码实现手写数字识别

在机器学习领域,分类任务是核心问题之一,其目标是根据已知数据特征预测新样本的类别。K近邻算法作为一种经典的惰性学习算法,其原理基于“物以类聚”的直观思想,通过计算样本间的距离进行类别投票。该算法无需复杂训练过程,适合作为理解机器学习工作流的入门工具,尤其在图像识别等场景中具有教学价值。本文以手写数字识别为例,结合MNIST数据集,详细解析KNN的实现细节与调优技巧,帮助读者掌握从数据预处理到模型评估的完整流程。通过实践,读者不仅能理解KNN在特征空间中的工作原理,还能学习到超参数调优和性能优化的工程方法,为

weixin_30608503的博客 417

手把手教你完成YOLOv8 PyQt5和PySide6目标检测界面搭建,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 PyQt5,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持目标检测、目标分割等模型进来检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

案例:k-nearest neighbors对手写数字进行分类预测

hsplit函数是按照列切分,(横向2000px)切分为100列,每一列是20像素,每个图像20*20的大小,下面是for循环的推导式,装进array,形状(50,100,20,20),50行.数据集分析:总共50行100列,总共5000个数字,我们要将每个单独的数字提取出来,那么原图片将被切分为50行,100列,1000/50=20,所以每一个数字的纵向占20px,2000/100=20,每个数字的横向占20px,每个数字的尺寸被切分为20x20px的大小。(11) 对自己手写数字进行预测,数据处理。

jdjhcn的博客 829

详解AUTOSAR:DaVinci Configurator配置CAN和UART数据协议解析器(RH850)(实战篇—1)

通过学习本篇博文项目,将会把所学的DaVinci Configurator知识系统串联起来。

不脱发的程序猿 2811

SA8295P QNX主机上电启动流程分析

嵌入式系统的启动过程对于确保系统正常运行至关重要。本文将详细分析SA8295P芯片在QNX主机上的上电启动流程,并提供相应的源代码示例。嵌入式系统的启动过程对于确保系统正常运行至关重要。本文将详细分析SA8295P芯片在QNX主机上的上电启动流程,并提供相应的源代码示例。以下是一个SA8295P QNX主机上电启动流程分析。

CodeMaven的博客 1231

用机器学习sklearn+opencv-python过古诗文网4位数字+字母混合验证码

为了能够训练一个识别古诗文网验证码的模型,我们用程序批量生成了和目标验证码的风格类似的图片用作训练集。然而,个别字符的字体样式还是有所区别,这就会影响最后的识别精读。如果能找到一个更相似的字体,那就最好不过了。我们生成了30000张验证码图片,但是验证码上的字符在大小、倾斜度和线条干扰度上都没有多大改变,所以在训练集中,某些字符的多条数据其实是非常类似的,这不利于机器学习,很容易导致过拟合。训练集数量可以减少,也要在模型上加强正则化来防止过拟合。

热爱代码 1508

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

基于OpenCV与特征匹配的中文运算符验证码识别实战

在自动化流程与数据采集场景中,验证码识别是常见的技术挑战。其核心原理在于通过图像处理技术提取字符特征,并结合模式识别算法进行匹配。传统OCR在应对非标准字体、字符粘连或中文特定字符时,识别精度往往受限。本文聚焦于一种特定类型的验证码——中文运算符算数验证码,通过OpenCV进行图像预处理与字符分割,并利用轮廓矩(Hu Moments)等特征匹配技术,精准定位并识别“加”、“减”、“乘”等关键运算符。这种方法结合了图像处理与机器学习,为特定场景下的验证码识别提供了一种轻量级、高鲁棒性的工程解决方案,尤其适用于

weixin_30765577的博客 435

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

图片单个数字识别

使用python人工智能实现 对图片单个数字进行识别,并在python终端输出

qq_58419337的博客 208

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

(二) python爬虫验证码识别(去除干扰线)

(二)python爬虫验证码识别(去除干扰线) 钉钉钉~继完成第一波的任务之后,又来第二波了!!!!!! 1.开发环境与工具 python27:sklearn、pytesser、opencv等 pycharm windows7 2.数据集 欢迎使用Markdown编辑器写博客 本Markdown编辑器使用...

肆小猿的博客 1万+
上一篇: python—————knn算法
下一篇: 详解 Python 实现线性回归模型:从理论到实践
dlraba802
博客等级 码龄4年 440粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值