1. 程式人生 > >機器學習-實戰-入門-MNIST手寫數字識別

機器學習-實戰-入門-MNIST手寫數字識別

作者:橘子派 宣告:版權所有,轉載請註明出處,謝謝。 實驗環境: Windows10 Sublime Anaconda 1.6.0 Python3.6 程式碼功能包括: 一.ubyte資料集轉換成csv形式
#將mnist資料集轉換成CSV格式
import struct

def to_csv(name,maxdata):
	lbl_f = open("./data/"+name+"-labels.idx1-ubyte","rb")
	#開啟標籤資料集
	img_f = open("./data/"+name+"-images.idx3-ubyte","rb")
	#開啟影象資料集
	csv_f = open("./data/"+name+",csv","w",encoding="utf-8")
	#寫入CSV檔案

	mag,lbl_count=struct.unpack(">II",lbl_f.read(8))
	#將位元組流轉換成python資料型別複製給標籤
	mag,img_count=struct.unpack(">II",img_f.read(8))
	#將位元組流轉換成python資料型別複製給影象
	rows,cols=struct.unpack(">II",img_f.read(8))
	#將位元組流轉換成python資料型別複製給行列
	pixels=rows*cols
	#計算資料總量

	res=[]
	for idx in range(lbl_count):
		if idx > maxdata:break
		#設定計數器,大於資料個數總量時跳出迴圈
		label=struct.unpack("B",lbl_f.read(1))[0]
		bdata=img_f.read(pixels)
		sdata=list(map(lambda n:str(n),bdata))
		csv_f.write(str(label)+",")
		#寫入標籤
		csv_f.write(",".join(sdata)+"\r\n")
		#寫入資料(數字)
		if idx < 10:
			s="P2 28 28 255\n"
			s+=" ".join(sdata)
			iname="./data/{0}-{1}-{2}.pgm".format(name,idx,label)
			with open(iname,"w",encoding="utf-8") as f:
				f.write(s)
	csv_f.close()
	#關閉CSV流
	lbl_f.close()
	#關閉標籤流
	img_f.close()
	#關閉影象流

to_csv("train",1000)
#轉換到train.csv 1000個數據
to_csv("t10k",1000)
#轉換到t10k.csv 1000個數據

二.用sklearn的交叉驗證處理資料,SVM訓練資料預測結果,metrics生成分類報告和準確率
#用sklearn中的SVM來訓練模型,預測資料集
from sklearn import cross_validation,svm,metrics

def load_csv(fname):
	labels=[]
	images=[]
	with open(fname,"r") as f:
		for line in f:
			cols=line.split(",")
			if len(cols)<2:continue
			labels.append(int(cols.pop(0)))
			vals=list(map(lambda n: int(n) / 256,cols))
			images.append(vals)
		return {"labels":labels,"images":images}

data=load_csv("./data/train.csv")
test=load_csv("./data/t10k.csv")

clf=svm.SVC()
clf.fit(data["images"],data["labels"])
#訓練資料集

predict=clf.predict(test["images"])
#預測測試集

score=metrics.accuracy_score(test["labels"],predict)
#生成測試精度
report=metrics.classification_report(test["labels"],predict)
#生成交叉驗證的報告
print(score)
#顯示資料精度
print(report)
#顯示交叉驗證資料集報告

執行結果
三組平均測試精度為0.772 參考文獻: 《統計學習方法》 《Web scraping and machine learning by python

相關推薦

機器學習-實戰-入門-MNIST數字識別

作者:橘子派 宣告:版權所有,轉載請註明出處,謝謝。 實驗環境: Windows10 Sublime Anaconda 1.6.0 Python3.6 程式碼功能包括: 一.ubyte資料集轉

機器學習實戰——KNN演算法數字識別

資料來源 我們的文字是形如這樣的,每個數字都有很多txt檔案,TXT裡面是01數字,表示手寫數字的灰度圖。 現在我們要用knn演算法實現數字識別。 資料處理 每個txt檔案都是32*32的0,1矩陣,如果要使用knn,那麼還得考慮行列關係,如果能把它拉開,只有一行,就可以不必考慮數字

機器學習實戰例項之數字識別(KNN、python3)

from numpy import * from os import listdir import operator def img2Vector(filename): returnVecter = zeros((1,1024)) fr = open(fil

機器學習實戰:knn數字

資料及程式碼github。 """ @author: lishihang @software: PyCharm @file: handwritten.py @time: 2018/11/26 16:18 """ import numpy as np import m

tensorflow 基礎學習五:MNIST數字識別

truncate averages val flow one die correct 表示 data MNIST數據集介紹: from tensorflow.examples.tutorials.mnist import input_data # 載入MNIST數據集,

tensorflow實戰MNIST數字識別的優化2-代價函式優化,準確率98%

最簡單的tensorflow的手寫識別模型,這一節我們將會介紹其簡單的優化模型。我們會從代價函式,多層感知器,防止過擬合,以及優化器的等幾個方面來介紹優化過程。    1.代價函式的優化:             我們可以這樣將代價函式理解為真實值與預測值的差距,我們神經

100天搞定機器學習|day39 Tensorflow Keras數字識別

提示:建議先看day36-38的內容 TensorFlow™ 是一個採用資料流圖(data flow graphs),用於數值計算的開源軟體庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯絡的多維資料陣列,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,

OpenCV機器學習:SVM分類器實現MNIST數字識別

0. 開發環境 最近機器學習隨著AI人工智慧的興起越來越火,博主想找一些ML的庫來練手。突然想起之前在看Opencv的doc時發現有ML的component,於是心血來潮就開始寫程式碼試試。話不多說,直接進正題。 以下我的開發環境配置: -Windows7

TensorFlow實現機器學習的“Hello World”--Mnist數字識別

TensorFlow實現機器學習的“Hello World” 上一篇部落格我們已經說了TensorFlow大概怎麼使用,這次來說說機器學習中特別經典的案例,也相當於是機器學習的“Hello World”,他就是Mnist手寫數字識別,也就是通過訓練機器讓他能看

深度學習mnist數字識別入門

使用tensorflow框架和python,學習實現簡單的神經網路,並進行調參,程式碼如下:   #! /usr/bin/python # -*- coding:utf-8 -*- """ a simple mnist classifier """ from __fut

深度學習入門——利用卷積神經網路實現MNIST數字識別

MNIST(Modified National Institute of Standards and Technology)資料庫是一個大型手寫數字資料庫,通常用於訓練各種影象處理系統。該資料庫還廣泛用於機器學習領域的培訓和測試。它是通過重新打亂來自NIST原始資料集的樣本而

mnist數字識別——深度學習入門專案(tensorflow+keras+Sequential模型)

前言 今天記錄一下深度學習的另外一個入門專案——《mnist資料集手寫數字識別》,這是一個入門必備的學習案例,主要使用了tensorflow下的keras網路結構的Sequential模型,常用層的Dense全連線層、Activation啟用層和Reshape層。還有其他方法訓練手寫數

基於Keras mnist數字識別---Keras卷積神經網路入門教程

目錄 1、一些說明 2、常量定義 3、工具函式 4、模型定義以及訓練 4.1、匯入庫 4.2、主入口 4.3、主函式 4.3.1、獲取訓練資料 4.3.1、定義模型 4.3.2

【AI實戰】訓練第一個AI模型:MNIST數字識別模型

在上篇文章中,我們已經把AI的基礎環境搭建好了(見文章:Ubuntu + conda + tensorflow + GPU + pycharm搭建AI基礎環境),接下來將基於tensorflow訓練第一個AI模型:MNIST手寫數字識別模型。 MNIST是一個經典的手寫數字資料集,來自美國國家

tensorflow實戰入門題目--數字識別

tensorflow實戰入門題目–手寫數字的識別 這是我的第一篇部落格,有很多寫不好的地方,還請大家多多批評指正。 手寫體的示範: 匯入資料,由於mnist手寫數字在 from tensorflow.examples.tutorials.mnist import i

TensorFlow——Mnist數字識別並可視化 實戰教程(一)

要點: 該教程為深度學習tensorflow框架mnist手寫數字識別。 實戰教程分為(一)(二)(三)分別從tensorflow和MATLAB雙角度來實現。 筆者資訊:Next_Legend  Q

基於tensorflow的MNIST數字識別(二)--入門

一、本文的意義       因為谷歌官方其實已經寫了MNIST入門和深入兩篇教程了,那我寫這些文章又是為什麼呢,只是抄襲?那倒並不是,更準確的說應該是筆記吧,然後用更通俗的語言來解釋,並且補充

PyTorch基礎入門六:PyTorch搭建卷積神經網路實現MNIST數字識別

1)卷積神經網路(CNN)簡介 關於什麼是卷積神經網路(CNN),請自行查閱資料進行學習。如果是初學者,這裡推薦一下臺灣的李巨集毅的深度學習課程。連結就不給了,這些資料網站上隨處可見。 值得一提的是,CNN雖然在影象處理的領域具有不可阻擋的勢頭,但是它絕對不僅僅只能用來影

Tensorflow深度學習之七:再談mnist數字識別程式

之前學習的第一個深度學習的程式就是mnist手寫字型的識別,那個時候對於很多概念不是很理解,現在回過頭再看當時的程式碼,理解了很多,現將加了註釋的程式碼貼上,與大家分享。(本人還是在學習Tensorflow的初始階段,如果有什麼地方理解有誤,還請大家不吝指出。)

Pytorch 快速入門(六)MNIST 數字識別之CNN

接觸過深度學習的朋友對MNIST資料集肯定不陌生。基本上算是玩神經網路裡的“hello,world!”本節基於MNIST資料集,實現CNN學習過程。下面是一個 CNN 最後一層的學習過程, 我們先視覺化看看:MNIST手寫資料 首先是資料集下載,為了看看資料集裡究竟是長什麼樣