矢量化编程就是用矢量运算取代所有的显式for循环。
上一节所用的是512*512*10的数据集很小,我们取的patch很小(8*8),学来的特征很少(25),而我又注释掉了梯度校验(偷懒),所以程序用了1分钟就跑完了(i5处理器)。
但实际上我们遇到的问题规模比这个打太多了,稍微大一点的数据集比如说MNIST,这个数据库是另外一个更大的手写体数据库NIST的子集,包含60000个训练例子和10000测试样本,所有的图片都经过了尺寸标准化和中心化,图片的大小固定(28*28)。
输入
images= loadMNISTImages('train-images-idx3-ubyte'); display_network(images(:,1:100));
瞧瞧MNIST前100个图片。
图1
图片变了,相应可见层和隐藏层的节点都要变,这里修改一下参数:
visibleSize= 28*28; hiddenSize= 196; sparsityParam= 0.1; lambda= 3e-3; beta= 3; images= loadMNISTImages('train-images.idx3-ubyte'); patches=images(:,1:10000);
由于上一节我的代码已经是矢量化之后的代码了,这里就直接拿来用就行了,Andrew说:“Ourimplementation takes around 15-20 minutes on a fast machine.”感受了一下,确实差不多,如果没有矢量化,估计一上午都难以出结果。
运行后直接等就行了10多分钟就出炉了,键盘有点微烫
图2
欢迎参与讨论并关注本博客和微博以及知乎个人主页后续内容继续更新哦~
转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!
矢量化编程——以MNIST为例
时间: 2024-10-28 04:41:15