1. 程式人生 > >深度學習筆記8 資料預處理

深度學習筆記8 資料預處理

資料預處理標準流程

  1. 自然灰度影象
    (1)灰度影象具有平穩特性,對每個資料樣本分別做均值消減(即減去直流分量)——每個影象塊,計算平均畫素值,並將影象每個畫素點減去均值。每個影象塊有一個不同的均值。

x=x-repmat(mean(x,1),size(x,1),1);%x是144*10000,代表10000個patch

(2)然後採用PCA/ZCA白化處理,其中的epsilon要足夠大以達到低通濾波的作用。epsilon值如何取,教程上說:
一種檢驗 epsilon 是否合適的方法是用該值對資料進行 ZCA 白化,然後對白化前後的資料進行視覺化。如果 epsilon 值過低,白化後的資料會顯得噪聲很大;相反,如果 epsilon 值過高,白化後的資料與原始資料相比就過於模糊。一種直觀上得到 epsilon 大小的方法是以圖形方式畫出資料的特徵值,如下圖的例子所示,你可以看到一條”長尾”,它對應於資料中的高頻噪聲部分。你需要選取合適的 epsilon,使其能夠在很大程度上過濾掉這條”長尾”,也就是說,選取的 epsilon 應大於大多數較小的、反映資料中噪聲的特徵值。

如原始資料是x

sigma=x*x'./size(x,2);
[u,s,v]=svd(sigma);
plot(1:size(sigma,1),diag(s));

顯示原資料的特徵值曲線:
這裡寫圖片描述
可以看到大約第50個特徵值後面的部分要過濾掉,因此,epsilon>=第50個特徵值就可以了。

>> s(50,50)

ans =

    0.1080

可以取epsilon=0.1080,教程上的程式碼給的值是epsilon=0.1,看來這個方法還是很有效的。

  1. 彩色影象
    (1)對於彩色影象,色彩通道間並不存在平穩特性。因此首先對資料進行特徵縮放(使畫素值在[0,1]間)。對於影象[0,255],可將畫素值除以255.
    (2)對特徵進行分量均值歸零化

    從下面程式碼中可看到是對同一通道的對應畫素點(即特徵)進行均值歸零。——這屬於特徵標準化。
    特徵標準化:
    首先計算每一維度上資料的均值(使用全體資料),之後再每個維度上減去該均值。下一步便是在資料的每一維度上除以該維度上資料的標準差。對於自然影象,方差歸一化不用進行。
    (3)使用足夠大的epsilon來做PCA/ZCA。
    ——參考linearDecoderExercise.m
% Subtract mean patch (hence zeroing the mean of the patches)
meanPatch = mean(patches, 2);  %patches' size :192*10000 ,即10000個8*8*3塊
patches = bsxfun(@minus, patches, meanPatch); % Apply ZCA whitening epsilon=0.1; sigma = patches * patches' / numPatches; [u, s, v] = svd(sigma); ZCAWhite = u * diag(1 ./ sqrt(diag(s) + epsilon)) * u'; patches = ZCAWhite * patches; displayColorNetwork(patches(:, 1:100));

執行:

plot(1:size(s,1),diag(s))

結果:
這裡寫圖片描述
要濾掉長尾,選第十幾個特徵值很合適。可選episilon=s(12,12)=0.0962.練習上給的是epsilon=0.1,看來這個方法還是比較靠譜的。~~呵呵

白化

  1. 基於重構的模型
    episilon的選擇就採用上面的方式——濾掉“長尾”。
  2. 基於正交化ICA的模型
    對基於正交化ICA的模型來說,保證輸入資料儘可能地白化(即協方差矩陣為單位矩陣)非常重要。這是因為:這類模型需要對學習到的特徵做正交化,以解除不同維度之間的相關性(詳細內容請參考 ICA 一節)。因此在這種情況下,epsilon 要足夠小(比如 epsilon = 1e − 6)。
    在上例採用epsilon=1e-6時,ZCA後的資料協方差矩陣,圖示:
    這裡寫圖片描述
    如果是單位矩陣,就是1對應的一條直線,而現在接近單位矩陣。
  3. 注意: 在使用分類框架時,我們應該只基於練集上的資料計算PCA/ZCA白化矩陣。需要儲存以下兩個引數留待測試集合使用:(a)用於零均值化資料的平均值向量;(b)白化矩陣。測試集需要採用這兩組儲存的引數來進行相同的預處理。
    例:在linearDecoderExercise.m中,可以看到,把ZCA白化後的patches訓練稀疏自編碼器,儲存了 ‘ZCAWhite’, ‘meanPatch’。這樣當後面在有影象通過該稀疏自編碼器提取特徵時,就要和訓練時一樣的白化矩陣和平均值。
  theta = initializeParameters(hiddenSize, visibleSize);

    % Use minFunc to minimize the function
    addpath minFunc/

    options = struct;
    options.Method = 'lbfgs';
    options.maxIter = 400;
    options.display = 'on';

    [optTheta, cost] = minFunc( @(p) sparseAutoencoderLinearCost(p, ...
        visibleSize, hiddenSize, ...
        lambda, sparsityParam, ...
        beta, patches), ...
        theta, options);

    % Save the learned features and the preprocessing matrices for use in
    % the later exercise on convolution and pooling
    fprintf('Saving learned features and preprocessing matrices...\n');
    save('STL10Features.mat', 'optTheta', 'ZCAWhite', 'meanPatch');