感知器可以用来检测手写数字吗?
Posted
技术标签:
【中文标题】感知器可以用来检测手写数字吗?【英文标题】:Can a perceptron be used to detect hand-written digits? 【发布时间】:2010-10-07 20:46:42 【问题描述】:假设我有一个小位图,其中包含一个手写数字 (0..9)。
是否可以使用(两层)感知器检测数字?
除了使用神经网络之外,还有其他方法可以从位图中检测单个数字吗?
【问题讨论】:
【参考方案1】:将位图的每个像素直接输入神经网络需要大量训练,并且不能很好地处理图像的缩放或旋转。
为了帮助神经网络进行良好的分类,您需要执行一些预处理步骤。
标准化图像: 调整对比度和亮度,使图像的直方图与参考图像匹配。 模糊图像,去除噪点。 使用一些阈值将其转换为黑白。 找到形状的边界框,缩放到预定义的大小。 计算可用于区分一个数字与另一个数字的图像的各种特征: 图片的Euler number — 告诉您形状中有多少个“孔”(例如,数字 8 有两个孔)。 白色像素的数量(数字的面积) 白色像素坐标集的principal components — 告诉您形状有多“拉长”。 ...您能想到的其他特征往往具有相似数字的相似值。主成分也可用于对形状的旋转进行归一化,使最长轴垂直。
特征是您输入神经网络进行分类的内容,而不是像素。
【讨论】:
我实际上已经尝试使用神经网络来执行类似的任务,并且我发现(到目前为止)如果我将实际像素提供给网络而不是执行计算并提供网络效果会更好那些计算。当然,我可能没有选择好的计算作为输入。但到目前为止,假设图像已足够正常化,它在没有它们的情况下工作得很好。【参考方案2】:这里是一个庞大的手写数字数据库的链接。头版还包含许多不同方法的相关性能数据,包括 2 层神经网络。这应该给你一个好的开始: MNIST digits database and performance
您可能还想查看Geoff Hinton's work on Restricted Boltzmann Machines,他说他的表现相当不错,并且在他的网站上有一个很好的解释性讲座(非常值得观看)。
【讨论】:
【参考方案3】:这是一个Matlab example program,它使用经过训练的神经网络来检测单个数字(图像大小固定为 28*28)。
【讨论】:
以上是关于感知器可以用来检测手写数字吗?的主要内容,如果未能解决你的问题,请参考以下文章
4.2tensorflow多层感知器MLP识别手写数字最易懂实例代码