MNIST数据集规则化

来源:互联网 发布:webgl编程指南 pdf 编辑:程序博客网 时间:2024/05/29 12:49

MNIST 数据集规则化

作为大三的我,前一段时间搞了手写数字识别,什么支持向量机啊,人工神经网络啊,knn啊,都玩过了,但仅仅是停留在人家公开的训练数据集上,而拿来测试用的图片也是人家的,比如mnist上的图片是这样的。

而我们拍的照片却是这样的

这样就带来了一个问题,测试的结果就不对了,用这样的图片去测试训练好的模型,可能有时候精度连10%都达不到。

这样,有必要将MNIST的生成过程学习一遍。

MNIST数据集

MNIST数据集是一个手写数字的集合,包含了60000个训练集和10000个测试集。每一个数字都是20x20的,包含在28x28的图片里面。这对于我们预处理是非常重要的。

预处理

#我们先预处理图片i = 0for no in [8,0,4,3]:    gray = cv2.imread("own_"+str(no)+".png", cv2.IMREAD_GRAYSCALE)    gray = cv2.resize(255-gray,(28,28))    cv2.imwrite("preprocessing/proImage_"+str(no)+".png",gray)

得到的图片是这样的:




这相对于原始图片已经好多了,但我们还需要改进这。

我们添加下面的代码:

(thresh, gray) = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

这段代码的含义,我不是学习图像处理的,于是查了一点资料,这段代码的含义就是图像阈值化处理,怎么说呢,就是图像中有超过阈值的一律归为255,比如这段代码中的阈值为128,只要图片中有像素超过128的就归为255,这样处理出来的效果为:




到这里我们已经处理了这个图片,但有一个最基本的问题就是,数字有可能不在中间,因为MNIST数据集所有的数字都在中间。

首先,我们想将调整20x20的数字位置。

由于对图像处理不太熟悉,这里先贴上代码:

import numpy as npimport cv2import mathfrom scipy import ndimagegray = cv2.imread("own_4.png", cv2.IMREAD_GRAYSCALE)(thresh, gray) = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)gray = cv2.resize(255-gray,(28,28))  while np.sum(gray[0]) == 0:    gray = gray[1:]while np.sum(gray[:,0]) == 0:    gray = np.delete(gray,0,1)while np.sum(gray[-1]) == 0:    gray = gray[:-1]while np.sum(gray[:,-1]) == 0:    gray = np.delete(gray,-1,1)rows,cols = gray.shapeif rows>cols:    factor = 20.0/rows    rows = 20    cols = int(round(cols*factor))    gray = cv2.resize(gray,(cols,rows))else:    factor = 20.0/cols    cols = 20    rows = int(round(rows*factor))    gray = cv2.resize(gray,(cols,rows))colsPadding = (int(math.ceil((28-cols)/2.0)),int(math.floor((28-cols)/2.0)))rowsPadding = (int(math.ceil((28-rows)/2.0)),int(math.floor((28-rows)/2.0)))gray = np.lib.pad(gray,(rowsPadding,colsPadding),'constant')def getBestShift(img):cy,cx = ndimage.measurements.center_of_mass(img)rows,cols = img.shapeshiftx = np.round(cols/2.0-cx).astype(int)shifty = np.round(rows/2.0-cy).astype(int)return shiftx,shiftydef shift(img,sx,sy):rows,cols = img.shapeM = np.float32([[1,0,sx],[0,1,sy]])shifted = cv2.warpAffine(img,M,(cols,rows))return shiftedshiftx,shifty = getBestShift(gray)shifted = shift(gray,shiftx,shifty)gray = shiftedcv2.imwrite("test.png",gray)

这段代码的意思就是,让不规则的图片变为规则的图片如MNIST,比如这样的:

处理之后是这样的:

这样,就完成了图片的处理。

通过对图片的处理化,我们可以将其应用在实际应用当中。

参考资料:http://openmachin.es/blog/tensorflow-mnist

接下来学习多数字识别,如这样的:

将其中的每一个数字都识别出来。^_^

2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾照没满一年扣了3分怎么办 6年免检但是行驶证到期怎么办 驾驶证和行驶证一起丢了怎么办 身份证驾驶证行驶证一起丢了怎么办 在银行柜圆机取款时忘了取卡怎么办 中国建设银银行取款密码忘了怎么办 买到证件不全的二手电动车怎么办 光大乐惠金卡信用卡还了怎么办 增驾期间被扣3分怎么办 a2驾驶证被扣12分后怎么办 我手机换号码了驾驶证档案怎么办 手机号码换了查不到驾照分了怎么办 金牛区源泉幼儿园摇不到号怎么办 b2驾驶证被扣12分后怎么办 福建省超过一年驾照未年审要怎么办 为缓解交通拥堵现状人们应该怎么办 告对方不知道对方出身日期怎么办 上海业余围棋4进3老不过怎么办 孩子想上学但又怕同学议论怎么办 在菲律宾黑了博彩老板的钱怎么办 九阴真经3d先遣服更新失败怎么办 公司核名通过不想用了怎么办 公司核名下来了不想注册了怎么办 家人受到小贷公司催款威胁怎么办 商标抽签资料提交上去有问题怎么办 花椒直播助手苹果版下载不了怎么办 在香港酒店住把床单弄上血了怎么办 综英美我能怎么办我也很绝望百度云 护照的名字中间有个空格怎么办 开车不小心压死黄鼠狼了怎么办 三户联保贷款一方不还怎么办 因为隔断中介违约…我该怎么办 上海居住证没下来换住址了怎么办 工商注册后大股东不注资怎么办 公司不给去办理变更股东信息怎么办 滴滴车主注册没有自己的车型怎么办 代办用虚假地址注册的公司怎么办? 写字楼注册公司租户不租了怎么办 租户没把公司迁出我该怎么办 租户不肯把户口迁出了业主怎么办 同片区个体户营业场所搬迁怎么办