1. 程式人生 > >深度學習入門教程UFLDL學習實驗筆記二:使用向量化對MNIST資料集做稀疏自編碼

深度學習入門教程UFLDL學習實驗筆記二:使用向量化對MNIST資料集做稀疏自編碼

今天來做UFLDL的第二個實驗,向量化。我們都知道,在matlab裡面基本上如果使用for迴圈,程式是會慢的一逼的(可以說基本就執行不下去)所以在這呢,我們需要對程式進行向量化的處理,所謂向量化就是將matlab裡面所有的for迴圈用矩陣運算的方法實現,在這裡呢,因為之前的實驗我已經是按照向量化的形式編寫的程式碼,所以這裡我只把我對程式碼修改的部分發上來供大家參考吧。本文為本人原創,參考了UFLDL的教程,是我自己個人對於這一系列教程的理解以及自己的實驗結果。非盈利性質網站轉載請在文章開頭處著名本文作者:77695,來源http://www.cnblogs.com/cj695/。盈利性質網站轉載請與作者聯絡,聯絡方式在文章後面。如未聯絡,本人將通過一切可能且合法的途徑追繳相應稿酬。請在轉載時保留此宣告。

這是我們使用的資料集,採用的是MNIST資料庫裡面的手寫字元。讀取資料集有一定的方法,這個現成的程式碼在UFLDL的教程裡面是可以下載的。讀取完資料集顯示效果如下:

image

最後訓練得到的結果如下

image

程式碼第一處要修改的是在train的地方,要把引數修改為這次實驗的引數:

visibleSize = 28*28;   % number of input units 
hiddenSize = 14*14;     % number of hidden units 
sparsityParam = 0.1;   % desired average activation of the hidden units.
                     % (This was denoted by the Greek alphabet rho, which looks like a lower-case "p",
		     %  in the lecture notes). 
lambda = 0.003;     % weight decay parameter       
beta = 3;            % weight of sparsity penalty term       

其次在computeNumericalGradient的地方,把梯度檢測數目減小:

for i=1 :min(size(theta,1),2)
    e = zeros(size(theta));
    e(i)=EPSILON;
    cha=(J(theta+e)-J(theta-e));
    numgrad(i)=cha/(2*EPSILON);
end

最後,取樣圖片,使用UFLDL提供的現成的讀取MNIST資料庫的函式即可:

function patches = sampleIMAGES()

img=loadMNISTImages('train-images.idx3-ubyte');
patches=img(:,10001:20000);
% patches = normalizeData(patches);
% 在實現手寫字元識別時,是不需要對其做歸一化處理的
end

注意:在做手寫字元識別時,使用MNIST的資料庫是不需要再對資料做歸一化處理的,如果做了歸一化處理,結果可能反而會出錯。

image

上圖是做了歸一化之後的結果,可以很明顯的看到,歸一化之後,每一個數字的格子之間的背景亮度是有一定差距的。

使用歸一化之後的資料經性訓練,最後得到的結果如下圖:

image

可以看到,這個結果與之前的結果比的話,並不能足矣用這些基來表達整個資料,因此是不好的。

為什麼會出現這樣一個結果呢,我們來看一下歸一化之後的結果:

image

下面是沒有歸一化的結果

image

可以看到沒有歸一化資料是從0-0.99的,變化範圍大,而歸一化後,資料變化範圍只有0.5,這顯然是不對的。要清楚的是,MINIST資料集本身就已經對資料進行了歸一化的處理因此我們就不用畫蛇添足了。

相關推薦

深度學習入門教程UFLDL學習實驗筆記使用量化MNIST資料稀疏編碼

今天來做UFLDL的第二個實驗,向量化。我們都知道,在matlab裡面基本上如果使用for迴圈,程式是會慢的一逼的(可以說基本就執行不下去)所以在這呢,我們需要對程式進行向量化的處理,所謂向量化就是將matlab裡面所有的for迴圈用矩陣運算的方法實現,在這裡呢,因為之前的實驗我已經是按照向量化的形式編寫的程

UFLDL量化程式設計練習MNIST資料稀疏編碼器訓練實現

     折騰了兩天,總算實現了用MNIST資料集的稀疏自編碼器訓練。發現了以下問題:      1,matlab程式設計所寫程式碼不能太奢侈。定義變數時要儘量節省記憶體資源,向量能解決的不要用方陣,int8型別能解決的不要用雙精度數;      2,UFLDL提供的min

深度學習入門教程UFLDL學習實驗筆記稀疏編碼

UFLDL即(unsupervised feature learning & deep learning)。這是斯坦福網站上的一篇經典教程。顧名思義,你將在這篇這篇文章中學習到無監督特徵學習和深度學習的主要觀點。 UFLDL全文出處在這:http://ufldl.stanford.edu/wiki/

深度學習入門教程UFLDL學習實驗筆記主成分分析PCA與白化whitening

主成分分析與白化是在做深度學習訓練時最常見的兩種預處理的方法,主成分分析是一種我們用的很多的降維的一種手段,通過PCA降維,我們能夠有效的降低資料的維度,加快運算速度。而白化就是為了使得每個特徵能有同樣的方差,降低相鄰畫素的相關性。 主成分分析PCA 第一步:首先我們需要獲取旋轉矩陣U,為了實現這一目的,我

深度學習入門專案用keras構建CNN或LSTMminist資料簡單分類任務

深度學習入門專案:用keras構建CNN或LSTM或RNN對Minist資料集做簡單分類任務 參考keras中文文件 ——keras: 是一個高階神經網路庫,用 Python 語言寫成,可以執行在 TensorFlow 或者 Theano 之上(即以此為後端)。

Tensorflow學習教程------利用卷積神經網路mnist資料進行分類_利用訓練好的模型進行分類

#coding:utf-8 import tensorflow as tf from PIL import Image,ImageFilter from tensorflow.examples.tutorials.mnist import input_data def imageprepare(ar

tensorflow學習筆記(北京大學) tf5_1minst_forward.py 完全解析 mnist資料

#coding:utf-8 #tensorflow學習筆記(北京大學) tf5_1minst_forward.py 完全解析 mnist資料集 #QQ群:476842922(歡迎加群討論學習 import tensorflow as tf #網路輸入節點為784個(代表每張輸入圖片的畫素個

Bobo老師機器學習筆記第七課-使用PCAMNIST資料進行降噪

問題1:什麼是MNIST資料集?   MNIST 資料集來自美國國家標準與技術研究所, National Institute of Standards and Technology (NIST). 訓練集 (training set) 由來自 250 個不同人手寫的數字構成

TensorFlow深度學習實戰(一)AlexNetMNIST資料進行分類

概要 進來一段時間在看深度學習中經典的CNN模型相關論文。同時,為了督促自己學習TensorFlow,通讀論文之後開始,利用TensorFlow實現各個模型,復現相關實驗。這是第一篇論文講解的是AlexNet,論文下載網址為:ImageNet Classific

tensorflow 學習專欄(四)使用tensorflow在mnist資料上使用邏輯迴歸logistic Regression進行分類

在面對分類問題時,我們常用的一個演算法便是邏輯迴歸(logistic Regression)在本次實驗中,我們的實驗物件是mnist手寫資料集,在該資料集中每張影象包含28*28個畫素點如下圖所示:我們使用邏輯迴歸演算法來對mnist資料集的資料進行分類,判斷影象所表示的數字

使用libsvmMNIST資料進行實驗

svm_type c_svc kernel_type linear 使用線性分類器 nr_class 2二分類 total_sv 15支援向量個數 rho 0.307309 label 1 -1 nr_sv 8 7正負類的支援向量(SV)個數 SV 1 1:7.213038 2:0.198066  1 1:-

使用KNNMNIST資料進行實驗

之前使用SVM對MNIST資料集進行了分類實驗,得到了98.46%的分類正確率(見:使用libsvm對MNIST資料集進行實驗)。 今天用python寫了個小程式,來測試一下KNN的分類效果。 由於KNN的計算量太大,還沒有使用KD-tree進行優化,所以對於60000訓練

使用Decision TreeMNIST資料進行實驗

之前已經對MNIST使用過SVM和KNN的方法進行分類,效果看起來還不錯。今天使用決策樹來實驗,看看結果如何。 使用的Decision Tree中,對MNIST中的灰度值進行了0/1處理,方便來進行分類和計算熵。 使用較少的測試資料測試了在對灰度值進行多分類的情況下,分類結

hadoop2.x入門編寫mapreduce氣象資料求每日最高氣溫和最低氣溫

1.下載氣象資料集 我們下載國內的氣象資料,使用下面命令進行下載 wget -D --accept-regex=REGEX -P data -r -c ftp://ftp.ncdc.noaa.gov/pub/data/noaa/2017/5*

WSWP(用python寫爬蟲)筆記實現連結獲取和資料儲存爬蟲

前面已經構建了一個獲取連結的爬蟲模組,現在繼續完善這個爬蟲。 分析網頁 要對一個網頁中的資料進行提取,需要先對網頁的結構有一個大體的瞭解,通過在瀏覽器檢視網頁原始碼的方法就能實現。 在瞭解到網頁的結構後,接下來便是獲取自己想要的資料了,個人比較喜歡用C

WebGL簡易教程()著色器傳輸資料

目錄 1. 概述 2. 示例:繪製一個點(改進版) 1) attribute變數 2) uniform變數 3) varying變數 3. 結果

深度學習入門---Keras報錯集合筆記

[錯誤1]在model.fit()呼叫之後會出現如下錯誤說明:Cannot interpret feed_dict key as Tensor: Tensor Tensor("conv2d_1_input:0", shape=(?, 256, 196, 3), ,dtype=

js學習入門教程筆記css+html+js使用者註冊程式碼實現

執行截圖:如下: 使用者註冊:結構層:html;表現層:css;行為層:javascript; html利用ul,li來構造:     注意事項:1、每個Input都要有相應的id,這是在js中去呼叫的。                   2、<a href

基於PyTorch的深度學習入門教程(八)——影象風格遷移

前言 本文介紹怎樣執行Neural-Style演算法。Neural-Style或者叫做Neural-Transfer,將一個內容影象和一個風格影象作為輸入,返回一個按照所選擇的風格影象加工的內容影象。 原理是非常簡單的:我們定義兩個距離,一個用於內容(Dc)

Deep Learning 2_深度學習UFLDL教程量化程式設計(斯坦福大學深度學習教程

1前言     本節主要是讓人用向量化程式設計代替效率比較低的for迴圈。     在前一節的Sparse Autoencoder練習中已經實現了向量化程式設計,所以與前一節的區別只在於本節訓練集是用MINIST資料集,而上一節訓練集用的是從10張圖片中隨機選擇的8*8的10000張小圖塊。綜上,只需要在