神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。

  1. 云栖社区>
  2. 博客>
  3. 正文

神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。

桃子红了呐 2017-11-09 17:52:00 浏览603
展开阅读全文

转自:http://blog.csdn.net/jeryjeryjery/article/details/72649320

这两天用Python来实现手写数字识别,刚开始用原始数据进行训练,结果预测结果都是同一个类别,全部是对应数字1。正确率也只有10%左右,下面是代码及运行结果截图: 
这里写图片描述

预测结果都是数字1。

  数据归一化是指将特征值从一个大范围映射到[0,1]或者[-1,1],如果原始值都是正数,则建议选择映射到[0,1];如果原始值有正数又有负数,则建议映射到[-1,1];具体情况需要具体分析。映射到[0,1]的实现是: 

new_value=valuemin_valuemax_valuemin_value


这样就能实现从原来的范围映射到[0,1]之间。 
libsvm中提供了数据归一化工具,就是svm-scale这个工具。如果你的数据文件已经满足了svm的格式要求,即labele1e2 这种格式,那么在window平台下,你可以直接调用libsvm\windows\svm-scale.exe文件来进行归一化操作。具体步骤是在cmd命令行中进入到svm-scale.exe所在文件夹,然后运行svm-scale来实现归一化。svm-scale的语法截图如下: 
scale语法 
其中-l 指定下界,-u指定上界,-s指定保存scale参数文件路径,-r源文件路径

下面以数据源train.txt为例,将其归一化到[0,1],并存入到train-to-one.txt中,语句截图如下: 
这里写图片描述

  因为手写数字图片是由一系列的像素点组成的,像素值从0到255,所以可以让每一个像素值除以255,从而实现映射。可以调用svm-scale来实现,也可以直接编写java代码来实现,然后再以归一化之后的数据进行训练模型并预测,其代码和截图如下: 
归一化数据

可以看出,准确率和速率明显提高了,不会出现仅仅只有一类的问题。但是其中的原理,本人现在还不知道,等我理解了再解释吧!
















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7880916.html,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
桃子红了呐
+ 关注