Unsupervised Feature Learning and Deep Learning(UFLDL) Exercise 代码实现

最近开始了解深度学习的东西,看到国内研究者翻译的斯坦福大学的深度学习的历程,觉得很不错,就按照学习例程学习,一步一步完成后面的练习。这个练习安排的很合理,得按顺序完成,跳跃着做可能会遇到一定的麻烦。我在完成中也遇到不少的麻烦,不过还是慢慢克服了,越往后程序对计算机的配置要求越高,需要的内存也越大。下面是我完成这些例程中一些关键性的代码,觉得有用的可以参考一下,建议大家先自己动手写,如果实在是遇到困难了,可以参考一下我写的代码,由于本人编程能力也很一般,代码优化做得也很差,只供参考而已。


Exercise1: Sparase AutoEncoder

这个练习比较关键,基本上后面许多练习都依赖于这个练习的代码,所以首先得完成好这个练习。这个练习需要补充3个地方的代码。我这里只列出其中最关键的一个地方的代码,也就是sparseAutoencoderCost.m这个文件。
函数的目的是首先代价的计算以及梯度的计算,具体的实现如下:
A1 = data;
Y = data;
z2 = W1 * data + repmat(b1,1,m);
A2 = sigmoid(z2);
z3 = W2 * A2 + repmat(b2,1,m);
A3 = sigmoid(z3);

rho_hat = mean(A2,2); % 隐层每个神经元的平均激活度 hiddenSize*1

%backpropagation
for i = 1:m             
    
    a1 = A1(:,i);
    
    a2 = A2(:,i);
    
    a3 = A3(:,i);
    
    y = Y(:,i);                 % 原始输入向量
    
    cost = cost + 1/2 * norm(y - a3, 2)^2;   % 计算代价
    
    delta_3 = -(y - a3) .* (a3 .* (1 - a3));
    
    delta_2 = (W2'* delta_3 + beta *(-sparsityParam ./rho_hat + (1 - sparsityParam) ./(1 - rho_hat))) .* (a2 .* (1 - a2));
    
    W1grad = W1grad + delta_2 * a1';
    b1grad = b1grad + delta_2;
    W2grad = W2grad + delta_3 * a2';
    b2grad = b2grad + delta_3;
end
% 计算梯度
W1grad = 1/m * W1grad + lambda * W1;
W2grad = 1/m * W2grad + lambda * W2;
b1grad = 1/m * b1grad;
b2grad = 1/m * b2grad;


%计算KL
KL = 0;
for i = 1:hiddenSize
    KL = KL + sparsityParam * log(sparsityParam/rho_hat(i)) + (1 - sparsityParam) * log((1 - sparsityParam)/(1 - rho_hat(i)));
end

%计算代价
cost = 1/m * cost + lambda/2 * (sum(sum(W1.^2)) + sum(sum(W2.^2))) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值