1. 程式人生 > >MNIST手寫數字體分類--KNN matlab實現

MNIST手寫數字體分類--KNN matlab實現

這裡直接給出KNN matlab的實現

trainImages = loadMNISTImages('train-images.idx3-ubyte');      
trainLabels = loadMNISTLabels('train-labels.idx1-ubyte');
N = 784;
K = 100;% can be any other value
testImages = loadMNISTImages('t10k-images.idx3-ubyte');
testLabels = loadMNISTLabels('t10k-labels.idx1-ubyte');
trainLength = length(trainImages);
testLength = length(testImages);
testResults = linspace(0,0,length(testImages));
compLabel = linspace(0,0,K);
tic;
for i=1:testLength
    curImage = repmat(testImages(:,i),1,trainLength);
    curImage = abs(trainImages-curImage);
    comp=sum(curImage);
    [sortedComp,ind] = sort(comp);
    for j = 1:K
        compLabel(j) = trainLabels(ind(j));
    end
    table = tabulate(compLabel);
    [maxCount,idx] = max(table(:,2));
    testResults(i) = table(idx);  

    disp(testResults(i));
    disp(testLabels(i));
end
% Compute the error on the test set
error=0;
for i=1:testLength
  if (testResults(i) ~= testLabels(i))
    error=error+1;
  end
end

%Print out the classification error on the test set
error/testLength
toc;
disp(toc-tic);
        
其中訓練資料60000條,測試資料10000條

執行時間慢的原因分析:

沒有進行主成分分析,用所有的維度在進行比較,這一點是可以改進的地方:)

附上其他次要程式碼:

function images = loadMNISTImages(filename)
%loadMNISTImages returns a 28x28x[number of MNIST images] matrix containing
%the raw MNIST images

fp = fopen(filename, 'rb');
assert(fp ~= -1, ['Could not open ', filename, '']);

magic = fread(fp, 1, 'int32', 0, 'ieee-be');
assert(magic == 2051, ['Bad magic number in ', filename, '']);

numImages = fread(fp, 1, 'int32', 0, 'ieee-be');
numRows = fread(fp, 1, 'int32', 0, 'ieee-be');
numCols = fread(fp, 1, 'int32', 0, 'ieee-be');

images = fread(fp, inf, 'unsigned char');
images = reshape(images, numCols, numRows, numImages);
images = permute(images,[2 1 3]);

fclose(fp);

% Reshape to #pixels x #examples
images = reshape(images, size(images, 1) * size(images, 2), size(images, 3));
% Convert to double and rescale to [0,1]
images = double(images) / 255;

end


function labels = loadMNISTLabels(filename)
%loadMNISTLabels returns a [number of MNIST images]x1 matrix containing
%the labels for the MNIST images

fp = fopen(filename, 'rb');
assert(fp ~= -1, ['Could not open ', filename, '']);

magic = fread(fp, 1, 'int32', 0, 'ieee-be');
assert(magic == 2049, ['Bad magic number in ', filename, '']);

numLabels = fread(fp, 1, 'int32', 0, 'ieee-be');

labels = fread(fp, inf, 'unsigned char');

assert(size(labels,1) == numLabels, 'Mismatch in label count');

fclose(fp);

end


相關推薦

MNIST數字分類--KNN matlab實現

這裡直接給出KNN matlab的實現 trainImages = loadMNISTImages('train-images.idx3-ubyte'); trainLabels = loadMNISTLabels('train-labels.idx1-u

用pytorch實現多層感知機(MLP)(全連線神經網路FC)分類MNIST數字的識別

1.匯入必備的包 1 import torch 2 import numpy as np 3 from torchvision.datasets import mnist 4 from torch import nn 5 from torch.autograd import Variable 6

深度學習系列——AlxeNet實現MNIST數字識別

    本文實現AlexNet,用於識別MNIST手寫數字體。所有程式碼的框架基於tensorflow。看了幾篇論文的原始碼之後,覺得tensorflow 確實很難,學習程式設計還是靠實踐。這篇部落格留著給自己以及學習深度學習道路上的小夥伴們一些參考吧,希望能對大家有所幫助!

pytorch 利用lstm做mnist數字識別分類

程式碼如下,U我認為對於新手來說最重要的是學會rnn讀取資料的格式。 # -*- coding: utf-8 -*- """ Created on Tue Oct 9 08:53:25 2018 @author: www """ import sys sys.path

北大人工智慧網課攻略[2]:mnist數字分類,並測試自己的手寫體

個人程式如下: 連結: https://pan.baidu.com/s/1Yy0Dg9AOGntDIdb4VGle4A 提取碼: zwv4 北大人工智慧網課考試一是手寫數字體識別,與常見的入門題目唯一的區別是我們需要再讀入老師手寫的圖片進行識別。編寫一下讀取普通圖片的程式帶入

Tensorflow之MNIST數字識別:分類問題(1)

一、MNIST資料集讀取 one hot 獨熱編碼獨熱編碼是一種稀疏向量,其中:一個向量設為1,其他元素均設為0.獨熱編碼常用於表示擁有有限個可能值的字串或識別符號優點:   1、將離散特徵的取值擴充套件到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點    2、機器學習演算法中,

Tensorflow之MNIST數字識別:分類問題(2)

整體程式碼: #資料讀取 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np from tensorflow.examples.tutorials.mnist import input_data mnis

使用LeNet-5實現mnist數字分類識別 TensorFlow

TensorFlow的學習材料很多,但很少有講得特別詳細,讓小白一看就懂的。我自己總結了cnn實現mnist分類識別的方法,希望能給TensorFlow初學者一些幫助,實測在python3下可以執行。 # -*- coding: utf-8 -*- # 使用LeNet-5實

深度學習之PyTorch —— CNN實現MNIST數字分類

​# 運用CNN分析MNIST手寫數字分類 import torch import numpy as np from torch.utils.data import DataLoader from torchvision.datasets import mnist fro

Keras入門實戰(1):MNIST數字分類

前面的部落格中已經介紹瞭如何在Ubuntu下安裝Keras深度學習框架。 現在我們使用 Keras 庫來學習手寫數字分類。 我們這裡要解決的問題是:將手寫數字的灰度影象(28 畫素×28 畫素)劃分到 10 個類別 中(0~9)。我們將使用 MNIST 資料集,它是機器學

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

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

MATLAB自動識別MNIST數字資料庫

1.MNIST手寫數字資料庫 資料庫由Google實驗室的Corinna Cortes和紐約大學柯朗研究所的Yann LeCun建有一個手寫數字資料庫,訓練庫有60,000張手寫數字影象,測試庫有10,000張。下載地址: 2 程式碼 This release i

使用LSTM實現mnist數字分類識別 TensorFlow

RNN做影象識別原理:MNIST資料集中一張圖片資料包含28*28的畫素點。RNN是將一張圖片資料的一行作為一個向量總體輸入一個X中。也就是說,RNN有28個輸入X,一個輸入X有28個畫素點。 輸出最後一個結果做為預測值。   TensorFlow入門學習程式碼: # -

MNIST數字識別【Matlab神經網路工具箱】

MNIST手寫數字識別Matlab程式碼:%Neural Networks Codes will be run on this part tic %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MATLAB】BP神經網路識別MNIST數字

一.Summary本文運用BP神經網路對MNIST手寫數字字元進行識別。BP神經網路是通過樣本以及期望輸出不斷調整權值以達到訓練的目的的演算法。本文采用三層BP神經網路對MNIST字元進行訓練,然後對提供的資料進行測試。二.Content1. 分析BP神經網路的基本原理:通過

Tensorflow實踐 mnist數字識別

model 損失函數 兩層 最簡 sin test http gif bat minst數據集      tensorflow的文檔中就自帶了mnist手寫數字識別的例子,是一個很經典也比較簡單

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

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

Caffe的運行mnist數字識別

而不是 所在 結果 ack cif sting one efi 打開 老規矩,首先附上官方教程:http://caffe.berkeleyvision.org/gathered/examples/mnist.html 1、必要軟件   因為Caffe中使用的是Linux才能

MNIST數字圖片識別(線性回歸、CNN方法的手工及框架實現)(未完待續)

shape 初始化 result rect not found pro res edi ise 0-Background 作為Deep Learning中的Hello World 項目無論如何都要做一遍的。 代碼地址:Github 練習過程中將持續更新blog及代碼。 第一

Mnist數字庫轉化為圖片形式 和標籤形式

Mnist 資料檔案有兩種,一種是圖片檔案,一種是標籤檔案,那麼如何把他們解析出來呢? (1)解析圖片檔案   可以看出在train-images.idx3-ubyte中,第一個數為32位的整數(魔數,圖片型別的數),第二個數為32位的整數(圖片的個數),第三和第四個也是32為的整數(分別代表圖片的行數和