UFLDL教程 Exercise:Sparse Autoencoder(答案)

本文详细介绍了深度学习入门过程中关键步骤的实践,包括生成训练数据集、构建并训练稀疏自编码器。通过实际代码示例,深入理解前向传播、反向传播及梯度检查过程,最终实现自定义稀疏自编码器的训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本人刚刚着手DL,所以博文也仅属于学习笔记范畴,每篇博文我都会将内容摘抄地址附在最上面,如果冒犯原作者,请见谅哈~))

 参考链接:

http://www.cnblogs.com/hrlnw/archive/2013/06/08/3127162.html

网页教程参考:

Exercise:Sparse Autoencoder

 

Exercise:Sparse Autoencoder

  1. Step1 generate training set

  在sampleIMAGES.m文件中完成生成训练集的代码,如下,tic和toc用来计时的:

tic
image_size=size(IMAGES);
i=randi(image_size(1)-patchsize+1,1,numpatches);
j=randi(image_size(2)-patchsize+1,1,numpatches);
k=randi(image_size(3),1,numpatches);
for num=1:numpatches
        patches(:,num)=reshape(IMAGES(i(num):i(num)+patchsize-1,j(num):j(num)+patchsize-1,k(num)),1,patchsize*patchsize);
end
toc 


   2. Step2 Sparse autoencoder objective

   在sparseAutoencoderCost.m文件中完成前向传播和后向传播等相关代码,如下:

%1.forward propagation
data_size=size(data);
active_value2=repmat(b1,1,data_size(2));
active_value3=repmat(b2,1,data_size(2));
active_value2=sigmoid(W1*data+active_value2);
active_value3=sigmoid(W2*active_value2+active_value3);
%2.computing error term and cost
ave_square=sum(sum((active_value3-data).^2)./2)/data_size(2);
weight_decay=lambda/2*(sum(sum(W1.^2))+sum(sum(W2.^2)));

p_real=sum(active_value2,2)./data_size(2);
p_para=repmat(sparsityParam,hiddenSize,1);
sparsity=beta.*sum(p_para.*log(p_para./p_real)+(1-p_para).*log((1-p_para)./(1-p_real)));
cost=ave_square+weight_decay+sparsity;

delta3=(active_value3-data).*(active_value3).*(1-active_value3);
average_sparsity=repmat(sum(active_value2,2)./data_size(2),1,data_size(2));
default_sparsity=repmat(sparsityParam,hiddenSize,data_size(2));
sparsity_penalty=beta.*(-(default_sparsity./average_sparsity)+((1-default_sparsity)./(1-average_sparsity)));
delta2=(W2'*delta3+sparsity_penalty).*((active_value2).*(1-active_value2));
%3.backword propagation
W2grad=delta3*active_value2'./data_size(2)+lambda.*W2;
W1grad=delta2*data'./data_size(2)+lambda.*W1;
b2grad=sum(delta3,2)./data_size(2);
b1grad=sum(delta2,2)./data_size(2);

   3. Step3  Gradient checking

   梯度检查,在computeNumericalGradient.m文件中完成梯度检查的相关代码,如下:

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

    4. Step4  Train the sparse autoencoder

   执行train.m文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值