稀疏自编码http://deeplearning.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder#Results

在这个问题集,您将实现稀疏自编码算法,并展示它是如何发现的边​​缘是自然的图像很好的代表性。(由布鲁诺Olshausen提供的图像)稀疏自编码算法的课程网站上找到的讲义描述。

在该文件sparseae_exercise.zip,我们提供了在Matlab一些起始代码。你应该写在文件所指处代码(“ 你的代码HERE ”)。你必须完成以下文件: sampleIMAGES.m,sparseAutoencoderCost.m,computeNumericalGradient.m在起动代码train.m显示了这些功能的使用。

具体来说,在这个练习中,您将实现一个稀疏的自编码,与使用L-BFGS优化算法8×8的图像块训练。

在软件的说明:提供的.zip文件包含子目录 minFunc与第三方软件实现L-BFGS,即经Creative Commons,属性,非商业许可证授权。如果你需要使用这个软件用于商业用途,你可以下载和使用不同的功能(fminlbfgs),可以达到同样的目的,但运行3倍〜这个练习慢(因此不太推荐)。你可以在阅读更多关于这个Fminlbfgs_Details页面。


第1步:生成训练集

第一步骤是生成训练集。为了得到一个训练样例点¯x,随机选取的10个图像中的一个,然后随机抽样从选定的图像的8×8的图像块,并转换图像修补程序(无论是行优先顺序或列主顺序;它doesn '吨物质)转换成一个64维向量来获得一个训练示例点¯x\中\重^ {64}。

完成代码sampleIMAGES.m。您的代码应该品尝10000图像块,并将它们连接成一个64×10000矩阵。

为了确保您的实现工作,在“第1步”运行代码train.m。这将导致从数据集200补丁进行随机抽样的情节。

实施过程中的技巧:当我们运行实施 sampleImages() ,它需要在5秒。如果您的实现需要30秒以上,这可能是因为你不小心让每一次你挑选一个随机图像的整个512×512像素的图像的副本。通过复制一个512×512像素的图像10000次,这可以让你实现更高效。虽然这并不代码显著为这项工作慢下来(因为我们只有10000的例子),当我们扩展到更大的问题在本季度晚些时候有10 6或更多的例子,这会显著减慢你的代码。请执行sampleIMAGES这样,你是不是使每个需要切出一个8x8的图像块时整个512×512像素的图像的副本。

第2步:稀疏自编码目标

实施代码以计算稀疏自编码成本函数Ĵ 稀疏W¯¯b (节讲义的3)和相应的衍生物Ĵ 稀疏相对于不同的参数。使用S形函数用于激活函数,F(Z)= \压裂{1} {​{1 + E ^ { -  Z}}}。特别是,完成代码sparseAutoencoderCost.m

稀疏自编码由矩阵参数 W¯¯^ {(1)} \在\重新^ {S_1 \倍S_2}, W¯¯^ {(2)} \在\重新^ {S_2 \倍S_3} 向量 b ^ {(1)} \在\重新^ {S_2}, b ^ {(2)} \在\重新^ {S_3}。然而,随后的标记方便,我们将“展开”所有这些参数成为一个非常长的参数向量θ小号小号2 + 小号小号3 + 小号2 + 小号3元。对之间的转换的代码W¯¯ (1) W¯¯ (2) (1) (2) θ参数在起动代码已经提供。

实施过程中的提示:我们的目标Ĵ 稀疏W¯¯b包含3个方面,相应的平方误差项,权重衰减项,稀疏的处罚。不客气但是要实现这一点,但为了方便调试,可以实现成本函数和微分运算(反向传播)仅适用于平方误差项第一(这相当于设置λ=β= 0),并实施在下一节梯度检验方法首先验证此代码是正确的。然后在验证对应于平方误差项的目标和衍生物计算工作后才,添加在代码来计算重量衰变和稀疏惩罚项和它们的相应的衍生物。

步骤3:渐变检查

继讲义的第2.3节,实施梯度检查的代码。具体来说,完成代码computeNumericalGradient.m。请使用EPSILON = 10 -4作为讲义描述。

我们还提供了在代码checkNumericalGradient.m为您测试您的代码。此代码定义一个简单的二次函数H:\重新^ 2 \ mapsto \回复由下式给出 H(X)= X_1 ^ 2 + 3x_1 X_2,并在该点计算它点¯x =(4,10)牛逼。它允许您验证您的数值计算梯度非常接近真(计算分析)梯度。

使用后checkNumericalGradient.m,以确保您的实现是正确的,下次使用computeNumericalGradient.m以确保您的sparseAutoencoderCost.m 正确计算衍生物。有关详细信息,请参阅步骤3 train.m。我们强烈建议你不要进入下一个步骤,直到您确认您的派生的计算是正确的。

实施过程中的提示:如果您在调试代码,执行梯度检查对小排量车型和更小的训练集(例如,使用只有10个训练样本和1-2隐患单位)可以加快速度。

第4步:火车稀疏自编码

现在,你有一个计算代码 Ĵ 稀疏及其衍生物,我们已经准备好,以尽量减少 Ĵ 相对于它的参数,从而培养我们的稀疏的自编码。

我们将使用L-BFGS算法。这是提供给您一个调用的函数 minFunc(马克·施密特提供的代码)包含在启动代码。(在这个作业的目的,你只需要调用minFunc使用默认参数。你不需要知道L-BFGS如何工作的。)我们已经在提供的代码train.m (第四步)来调用minFunc。的minFunc代码假定要优化的参数是一个长参数矢量; 所以我们将用“ θ ”参数而不是“ W¯¯ (1) W¯¯ (2) (1) (2) ) ”参数传递我们的参数,它的时候。

火车一疏自编码与64输入单元,25隐藏单元和64个输出单元。在我们的起动码,我们提供了一个功能,用于初始化的参数。我们初始化偏置b ^ {(L)} _我到零,和权重W¯¯^ {(L)} _ {IJ} ,以随机数从间隔均匀地拉伸 \左[ -  \开方{\压裂{6} {N _ {\在RM} + N _ {\ RM出来} +1}} \开方{\压裂{6} {N _ {\在RM} + N _ {\ RM出来}} +1} \,\右],其中Ñ 是扇入(的输入送入一个节点号)和Ñ 是扇入(的单位数一个节点送入)。

我们对各种参数提供的值(λ,β,ρ等)应该工作,但随时与参数的不同设置,以及发挥。

实施过程中的提示:一旦你有你的BP执行正确计算衍生物(如使用梯度步骤3中检查验证),当你正在使用它与L-BFGS优化Ĵ 稀疏W¯¯b,确保你不会每一步做梯度检查。BP算法可以用来计算的衍生物Ĵ 稀疏W¯¯b相当有效,如果你被加计算梯度数值上的每一步,这将你的程序显著放缓。


第5步:可视化

培训自编码后,使用display_network.m可视化的教训权重。(见train.m,步骤5)运行“ 打印-djpeg weights.jpg ”到可视化保存到文件“ weights.jpg”(你将与你的代码一并提交)。

结果

要成功完成这个任务,你应该表现出你的疏自编码算法的一种集学习边缘检测的。例如,这是我们所获得的可视化:


Gabor.jpg


我们实现了约5分钟,以快速的计算机上运行。在你最终需要尝试多个实现或不同的参数值的情况下,一定要预算足够的时间进行调试和运行,你需要的实验。

此外,通过对比的方式,这里有来自我们并不认为成功(无论是越野车的实现,或在参数调优的)实现可视化的东西:


Badfilter1.jpg Badfilter2.jpg Badfilter3.jpg

Badfilter4.jpg Badfilter5.jpg Badfilter6.jpg

详细步骤在:

http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值