UFLDL矢量化编程练习:翻译

这是UFLDL第二单元,矢量化编程作业的翻译,先贴译文,做完作业再贴代码

 

练习:矢量化

From Ufldl

Jump to: navigation, search

 

内容

[隐藏]

 

矢量化

        前面我们对从自然图片剪出来的图像块实现了一个稀疏自编码器。这一组问题中,你要向量化你的代码,让它运行得更快,并进一步修改你的稀疏自编码器代码,使其可用于手写数字图像。用于从手写数字学习的网络要比你用自然图片训练好的网络大很多,所以用原来的实现去做会慢得让人痛苦。但是,有了自编码器的向量化实现,就能用合理的计算时间达到目的。

 

支持代码/数据

        这个练习另外需要下列文件:

·        MNIST数据集(训练图像)

·        MNIST数据集(训练标签)

·        Matlab中装入MNIST数据集的支持函数

SeamusWEI说明:点击网站超链接即可下载数据集和函数

 

第一步:矢量化你的稀疏自编码器实现

        利用矢量化与神经网络矢量化中思路(SeamusWEI说明:UFLDL教程第二单元),矢量化sparseAutoencoderCost.m函数(SeamusWEI说明:UFLDL教程第一单元练习中所实现的主要函数)。在我们的实现中,利用矩阵运算与repmat函数,去除了所有for循环。(如果想用更高级矢量化思路,matlab命令行中键入help bsxfun,bsxfun函数可取代矢量化步骤中一些repmat,这个练习里用不上)。我们稀疏自编码器的矢量化版本在一个快速计算机上运行时间少于一分钟(从10000幅图像块中学习25个特征)。

(注:不用矢量化其它文件中的代码)

 

第二步:学习手写数字特征

       现在你已经矢量化了代码,很容易在中等尺寸图像上学习较大的特征集。在练习这一部分,你要用稀疏自编码器从MNIST数据集中学习手写数字特征。

MNIST数据可从[1](http://yann.lecun.com/exdb/mnist/)得到。下载文件train-images-idx3-ubyte.gz 并解压,得到源图像后,用我们提供的帮助函数把数据装入为matlab中矩阵(http://deeplearning.stanford.edu/wiki/index.php/Using_the_MNIST_Dataset)。虽然所提供帮助函数把输入样本x和类别标签y都装入,但对这个作业而言,只需要输入样本x,因为稀疏自编码器是一种无监督学习算法(后面有个作业,会用到类别标签y)。

 

我们用下面这组参数从MNIST数据集学到了好的特征:

visibleSize = 28*28

hiddenSize = 196

sparsityParam = 0.1

lambda = 3e-3

beta = 3

patches = MNIST数据集开始的10000幅图像

 

      用minFunc函数经过400次迭代之后,你的自编码器应该学到了类似笔画的特征。换句话说,这就是学会了用出现在图像中的笔画表示手写字符。我们的实现在快速机器上用了15-20分钟,可视化后特征看起来应该像下面图像:

 

如果你的参数调谐得不好,或者自编码器的实现代码有问题,你可能得到的是下面两幅图像之一:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值