动手实现notMNIST数据集图片分类

图片分类是机器学习中的一项常见任务。notMNIST是这样的一个数据集:图片共分为A、B、C、D、E、F、G、H、I、J十类,宽高都是28个像素,样式各异、姿态万千。下图中的图片虽然都属于A类,但外观差异非常之大,因此比MNIST(手写数字图片)数据集的分类任务难度更大。

下面我们来训练一个逻辑回归模型,用于对notMNIST数据集的图片分类,使用Python2.7实现。

准备工作

加载需要的包,如numpy、os、sys、sklearn等。

下载数据

使用urlretrieve()函数下载数据,包括两个文件,notMNIST_large.tar.gz和notMNIST_small.tar.gz,分别对应训练集和测试集,前者247M,后者8.5M。

解压数据

使用tarfile包解压文件,对每一类单独生成一个文件夹,里面包含对应的图片。经统计,训练集共有529138张图片,测试集共有18737张图片。有的图片尺寸不符合28*28,跳过即可。有的图片和标签(也就是图片所属类别)看起来似乎并不一致,即存在一定的噪声。比如下面这些,虽说都属于A类,但是“度”和“千”也混进来了是什么鬼……

整理数据

接下来用ndimage包读入训练集和测试集中,每个分类下的全部图片,将每一张图片转换为28*28的numpy array,其中的每一个值为归一化之后的像素值。这样每个分类下的全部图片就变成了一个(image_number, 28, 28)的3D array,image_number为该分类下的图片数量。不妨为每个分类单独生成一个pickle,便于之后加载继续使用。

生成训练集、校验集和测试集

接下来,从全部训练数据中均匀随机地选出200000份作为训练集、10000份作为校验集,从全部测试数据中均匀随机地选出10000份作为测试集。不管是训练集、校验集还是测试集,各个类别所占比例都是相等的。

用一个字典来保存训练集、校验集和测试集的features以及labels,并存到一个pickle中,便于之后使用。

训练模型、评估效果

使用sklearn包提供的LogisticRegression来训练一个简单的逻辑回归模型,用fit()函数训练,用score()函数计算平均分类准确率。最后,模型在测试集上达到了89.3%的准确率。

代码

代码可以在我的Github上找到:https://github.com/Honlan/udacity-notes,其中的 实战1 notMNIST数字识别 部分。

原文发布于微信公众号 - 宏伦工作室(HonlanFarm)

原文发表时间:2016-12-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding迪斯尼

用Python从零开始设计数字图片识别神经网络--搭建基本架构

1654
来自专栏机器之心

资源 | GitHub新项目:轻松使用多种预训练卷积网络抽取图像特征

选自GitHub 机器之心整理 参与:思源 最近 GitHub 有一个非常有意思的项目,它可以使用多种预训练 TensorFLow 模型计算图像特征。对于每一个...

3176
来自专栏目标检测和深度学习

YOLO v3的tf+keras实现

2304
来自专栏Python小屋

Python扩展库scipy.misc中图像转换成pillow图像

众所周知,在数字图像处理领域中有很多基准测试图像,这些图像用来作为科研人员PK自己的算法时的参考,给大家提供一个公平的样本,针对同一个问题进行处理时,可以用这些...

3175
来自专栏mathor

*matlab—线性回归方程式与线性系统

1113
来自专栏CreateAMind

DeepMind时间序列生成模型GTMM - NTM改进

903
来自专栏磐创AI技术团队的专栏

实用 | 分享一个决策树可视化工具

【磐创AI导读】:这篇文章希望跟大家分享一个可视化决策树或者随机森林的工具。这可以帮助我们更好的去理解或解释我们的模型。想要获取更多的机器学习、深度学习资源。欢...

2181
来自专栏xingoo, 一个梦想做发明家的程序员

Spark机器学习——模型选择与参数调优之交叉验证

spark 模型选择与超参调优 机器学习可以简单的归纳为 通过数据训练y = f(x) 的过程,因此定义完训练模型之后,就需要考虑如何选择最终我们认为最优的模...

5006
来自专栏AI科技评论

深度丨机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(三)

AI科技评论按:本文是介绍用TensorFlow构建图像识别系统的第三部分。 在前两部分中,我们构建了一个softmax分类器来标记来自CIFAR-10数据集的...

3756
来自专栏Petrichor的专栏

深度学习: convolution (卷积)

卷积层是没有“厚度”一说的。如果非要有,那么假设一个卷积层由10个滤波器(假设每个滤波器有16通道)组成,那么该卷积层的“厚度”即为10。和输入输出数据那种只需...

3232

扫码关注云+社区

领取腾讯云代金券