神經網絡預測mnist時候如果不歸一化,則准確率僅僅10%下文作者svm也遇到了。


轉自: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的格式要求,即label1:value12:value2.... 這種格式,那么在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代碼來實現,然后再以歸一化之后的數據進行訓練模型並預測,其代碼和截圖如下:
歸一化數據

可以看出,准確率和速率明顯提高了,不會出現僅僅只有一類的問題。但是其中的原理,本人現在還不知道,等我理解了再解釋吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM