深度学习笔记8 数据预处理

来源:互联网 发布:阿里云com续费 编辑:程序博客网 时间:2024/06/05 06:47

数据预处理标准流程

  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 whiteningepsilon=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');
0 0
原创粉丝点击