UFLDL Exercise:Sparse Autoencoder

1. sampleIMAGES

for i=1:numpatches
    imgNum = round(rand(1,1)*9+1);
    row = round(rand(1,1)*(512-patchsize)+1);
    col = round(rand(1,1)*(512-patchsize)+1);
    patch = IMAGES(row:row+patchsize-1,col:col+patchsize-1,imgNum);
    patches(:,i) = reshape(patch,patchsize*patchsize,1);
end

2. sparseAutoencoderCost

%forward
a1 = sigmoid(bsxfun(@plus, W1*data, b1));
a2 = sigmoid(bsxfun(@plus, W2*a1, b2));
%cost
ave_square = sum(0.5*sum((a2-data).^2)) / m;
weight_decay = 0.5 * lambda * (sum(sum(W1.^2))+sum(sum(W2.^2)));
tmp = mean(a1, 2);
sparsity = beta * sum(sparsityParam*log(sparsityParam./tmp)+(1-sparsityParam)*log((1-sparsityParam)./(1-tmp)));
cost = ave_square + weight_decay + sparsity;
%BP
tb2grad = (a2-data) .* a2 .* (1-a2);
b2grad = mean(tb2grad,2);
W2grad = tb2grad * a1' ./ m + lambda * W2;
sparsity_penalty = beta * (((1-sparsityParam)./(1-tmp))-(sparsityParam./tmp));
tb1grad = bsxfun(@plus, W2'*tb2grad, sparsity_penalty) .* a1 .* (1-a1);
b1grad = mean(tb1grad,2);
W1grad = tb1grad * data' ./ m + lambda * W1;

3. computeNumericalGradient

EPSILON = 0.0001;
for i=1:size(theta)
    l = theta;
    r = theta;
    l(i) = l(i) - EPSILON;
    r(i) = r(i) + EPSILON;
    numgrad(i) = (J(r)-J(l))/(2*EPSILON);
    disp(i);
end

4. result

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值