您的位置:首页 > 其它

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

2015-06-17 09:18 483 查看

数据预处理标准流程

自然灰度图像

(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)对于彩色图像,色彩通道间并不存在平稳特性。因此首先对数据进行特征缩放(使像素值在[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,看来这个方法还是比较靠谱的。~~呵呵

白化

基于重构的模型

episilon的选择就采用上面的方式——滤掉“长尾”。

基于正交化ICA的模型

对基于正交化ICA的模型来说,保证输入数据尽可能地白化(即协方差矩阵为单位矩阵)非常重要。这是因为:这类模型需要对学习到的特征做正交化,以解除不同维度之间的相关性(详细内容请参考 ICA 一节)。因此在这种情况下,epsilon 要足够小(比如 epsilon = 1e − 6)。

在上例采用epsilon=1e-6时,ZCA后的数据协方差矩阵,图示:



如果是单位矩阵,就是1对应的一条直线,而现在接近单位矩阵。

注意: 在使用分类框架时,我们应该只基于练集上的数据计算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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: