您的位置:首页 > 编程语言

Exercise:Sparse Autoencoder 代码示例

2015-05-18 09:55 417 查看
练习参考Sparse Autoencoder

第一步,生成训练数据。在sampleIMAGES.m文件中加入如下代码:

size3D=size(IMAGES);

for i=1:numpatches

x=randi(size3D(1)-patchsize+1);

y=randi(size3D(2)-patchsize+1);

patches(:,i)=reshape(IMAGES(x:x+patchsize-1,y:y+patchsize-1,randi(size3D(3))),patchsize*patchsize,1);

end

在train.m文件中注释掉STEP 2到STEP 5的代码,运行train.m查看效果。

第二步,检查梯度。在computeNumericalGradient.m文件中加入如下代码:

EPSILON=0.0001;

n=size(theta);

for i=1:n

theta1=theta;

theta2=theta;

theta1(i)=theta1(i)+EPSILON;

theta2(i)=theta2(i)-EPSILON;

numgrad(i)=(J(theta1)-J(theta2))/(2*EPSILON);

end

在train.m文件中注释掉STEP 2到STEP 5的代码,调用checkNumericalGradient(),检查梯度计算是否正确。

第三步,计算稀疏自编码器的损失和梯度。梯度利用反向传导算法计算。在sparseAutoencoderCost.m文件中加入如下代码:

m=size(data,2);

a2=sigmoid(bsxfun(@plus,W1*data,b1));

a3=sigmoid(bsxfun(@plus,W2*a2,b2));

squared_error=sum(sum((a3-data).^2))/(2*m);

weight_decay=lambda/2*(sum(sum(W1.^2))+sum(sum(W2.^2)));

pj=mean(a2,2);

sparsity_penalty=sparsityParam.*log(sparsityParam./pj)+(1-sparsityParam).*log((1-sparsityParam)./(1.-pj));

d3=(a3-data).*(a3.*(1-a3));

d2=(W2'*d3+beta.*repmat((-sparsityParam./pj+(1-sparsityParam)./(1.-pj)),1,size(data,2))).*(a2.*(1-a2));

W2grad=d3*a2'./m+lambda*W2;

b2grad=sum(d3,2)./m;

W1grad=d2*data'./m+lambda*W1;

b1grad=sum(d2,2)./m;

cost=squared_error+weight_decay+beta*sum(sparsity_penalty);

在train.m文件中注释掉STEP 4到STEP 5的代码,运行STEP 3中的梯度检验代码,检验梯度计算是否正确。

第四步,训练稀疏自编码器。梯度计算正确的话,便可进行训练。在train.m文件中注释掉STEP 3的代码,运行STEP 4,STEP 5。最后会出现可视化训练结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: