码迷,mamicode.com
首页 > 其他好文 > 详细

线性解码器——解决数据缩放问题

时间:2014-08-16 15:12:00      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:deep learning   ufldl   深度学习   分类器   编码   

稀疏自编码器效果不错,但是有个固有缺陷:必须对输入数据的范围缩放到(0,1)。

 

设想一个图像如果不经预处理,直接把大于1的值输入稀疏自编码器,那么被sigmoid一下,就成了(0,1)的范围了,再被sigmoid一下,还是在(0,1)范围。这样残差根本没办法算,因为经过了sigmoid变换之后的数据已经不可能与输入数据相等了。

 

但是如果我们把第三层,原先的sigmoid函数换成恒等函数,事情就发生了变化。

bubuko.com,布布扣

 

这样我们就能用实值输入,不需要放缩样本到(0,1)范围,比如这在处理彩色图像、PCA白化时是很难做到的。

 

因此我们只需要再对稀疏自编码算法的最后一层的残差稍作修改即可

bubuko.com,布布扣

 

代码如下

 

function [cost,grad,features] = sparseAutoencoderLinearCost(theta, visibleSize, hiddenSize, ...
                                                            lambda, sparsityParam, beta, patches)
                                
W1 = reshape(theta(1:hiddenSize*visibleSize), hiddenSize, visibleSize);
W2 = reshape(theta(hiddenSize*visibleSize+1:2*hiddenSize*visibleSize), visibleSize, hiddenSize);
b1 = theta(2*hiddenSize*visibleSize+1:2*hiddenSize*visibleSize+hiddenSize);
b2 = theta(2*hiddenSize*visibleSize+hiddenSize+1:end);

cost = 0;
W1grad = zeros(size(W1)); 
W2grad = zeros(size(W2));
b1grad = zeros(size(b1)); 
b2grad = zeros(size(b2));

numpatches=size(patches,2);
a2=sigmoid(W1*patches+repmat(b1,1,numpatches));
a3=W2*a2+repmat(b2,1,numpatches);%更改
Rho=sum(a2,2)/numpatches;
Penalty=-sparsityParam./Rho+(1-sparsityParam)./(1-Rho);
Delta3=(a3-patches);%更改
Delta2=(W2'*Delta3+beta*repmat(Penalty,1,numpatches)).*a2.*(1-a2);
cost1=sumsqr(a3-patches)/numpatches/2;
cost2=(sumsqr(W1)+sumsqr(W2))*lambda/2;
cost3=beta*sum(sparsityParam*log(sparsityParam./Rho)+(1-sparsityParam)*log((1-sparsityParam)./(1-Rho)));
cost=cost1+cost2+cost3;
W2grad=Delta3*a2'/numpatches+lambda*W2;
b2grad=sum(Delta3,2)/numpatches;
W1grad=Delta2*patches'/numpatches+lambda*W1;
b1grad=sum(Delta2,2)/numpatches;

grad = [W1grad(:) ; W2grad(:) ; b1grad(:) ; b2grad(:)];
end

function sigm = sigmoid(x)
  
    sigm = 1 ./ (1 + exp(-x));
end

图像是彩色的,所以有3通道,输入维数8*8*3,原始图像样例如图1

bubuko.com,布布扣

图1


在使用了ZCA之后,图像变得锐利了,如图2

bubuko.com,布布扣

图2


通过线性解码器,可以学习得到400个特征如图3

bubuko.com,布布扣

图3


欢迎参与讨论并关注本博客微博以及知乎个人主页后续内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!



线性解码器——解决数据缩放问题,布布扣,bubuko.com

线性解码器——解决数据缩放问题

标签:deep learning   ufldl   深度学习   分类器   编码   

原文地址:http://blog.csdn.net/ycheng_sjtu/article/details/38612701

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!