Exercise:Learning color features with Sparse Autoencoders 代码示例

Exercise:Learning color features with Sparse Autoencoders 代码示例

练习参考Learning color features with Sparse Autoencoders

 

将稀疏自编码器修改为线性解码器,只需把第三层改为线性函数如a(3) = z(3) 即可,并修改相应的梯度计算公式。

sparseAutoencoderLinearCost.m

 

[plain] view plaincopy
 
  1. W1 = reshape(theta(1:hiddenSize*visibleSize), hiddenSize, visibleSize);  
  2. W2 = reshape(theta(hiddenSize*visibleSize+1:2*hiddenSize*visibleSize), visibleSize, hiddenSize);  
  3. b1 = theta(2*hiddenSize*visibleSize+1:2*hiddenSize*visibleSize+hiddenSize);  
  4. b2 = theta(2*hiddenSize*visibleSize+hiddenSize+1:end);  
  5.   
  6. cost = 0;  
  7. W1grad = zeros(size(W1));   
  8. W2grad = zeros(size(W2));  
  9. b1grad = zeros(size(b1));   
  10. b2grad = zeros(size(b2));  
  11.   
  12. m=size(data,2);  
  13. a2=sigmoid(bsxfun(@plus,W1*data,b1));  
  14. a3=bsxfun(@plus,W2*a2,b2);  
  15. squared_error=sum(sum((a3-data).^2))/(2*m);  
  16. weight_decay=lambda/2*(sum(sum(W1.^2))+sum(sum(W2.^2)));  
  17. pj=mean(a2,2);  
  18. sparsity_penalty=sparsityParam.*log(sparsityParam./pj)+(1-sparsityParam).*log((1-sparsityParam)./(1.-pj));  
  19. d3=(a3-data);  
  20. d2=(W2'*d3+beta.*repmat((-sparsityParam./pj+(1-sparsityParam)./(1.-pj)),1,size(data,2))).*(a2.*(1-a2));   %d2 25X10000  
  21. W2grad=d3*a2'./m+lambda*W2;  
  22. b2grad=sum(d3,2)./m;  
  23. W1grad=d2*data'./m+lambda*W1;  
  24. b1grad=sum(d2,2)./m;  
  25. cost=squared_error+weight_decay+beta*sum(sparsity_penalty);  
posted @ 2015-11-18 14:32  菜鸡一枚  阅读(139)  评论(0)    收藏  举报