矢量化编程——以MNIST为例

矢量化编程就是用矢量运算取代所有的显式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

矢量化编程——以MNIST为例的相关文章

矢量化编程的简单记录

基于矩阵的算法都是针对向量的,这里也成为矢量.为了简化程序的逻辑,需要一种新的编程方法,处理基于矩阵的基本运算,这就是所谓的矢量化编程. 1 最早出现的矢量化编程语言是 MATLAB脚本语言,它极大地降低了数学领域程序设计的复杂度.因为大量的人工智能算法最早都是用MATLAB语言编写的. 2 python自带的list结构,提供的切片功能可以部分实现矢量化编程.其扩展包Numpy提供了专门的矩阵数据结构和线性代数库,完全实现了矢量化编程. 矢量化的一个重要特点是可以直接将数学公式转换为相应的程序

UFLDL教程练习答案一(稀疏自编码器和矢量化编程实现)

最近想研究下深度学习,一开始就看UFLDL(unsuprisedfeature learning and deep learning)教程了,特将课后习题答案放在这里,作为一个笔记. 笔记: 1:自编码算法是一个无监督学习算法,它通过学习hw,b(x) = x,因此最后的outputlayer单元数与inputlayer单元数量相等,而中间的hiddenlayer可以很大,这是加个稀疏惩罚项,就相当于使中间很多结点的激励值为0,这样就是类似于PCA了. 2:可视化自编码器,习题中可视化的是W1,

稀疏自编码器和矢量化编程

相关的公式 证明参考PPT: http://wenku.baidu.com/link?url=dBZZq7TYJOnIw2mwilKsJT_swT52I0OoikmvmgBaYE_NvP_KChFZ-HOURH5LMiLEuSVFcGmJ0bQfkG-ZYk-IRJf7D-w6P9PBec8EZ9IxgFS Python实现代码参考 @author: Paul Rothnieemail : [email protected]https://github.com/siddharth950/Spar

是时候开始引入异常化编程了!

laravel-validation 异常化表单验证 合理的利用异常化编程方法,可以使代码可维护性大幅提高. 使用前的准备 在 composer.json 文件中申明依赖: "five-say/laravel-validation": "1.*" 在 /app/config/app.php 中设置"别名" 'aliases' => array( ... 'Validation' => 'FiveSay\LaravelValidatio

linux无锁化编程--__sync_fetch_and_add系列原子操作函数

linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基础. 下面的东西整理自网络.先感谢大家的分享! __sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文.Multithreaded simple data type access and atomic variables __sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetc

ArcGIS教程:ArcGIS地质图矢量化技巧概要

以ArcGIS为例,结合自己多年的工作经验,来介绍一下地质图矢量化的技巧. 一.底图的配准 不同比例尺的图件,有着不同的配准精度要求: 1:20万的地质图,配准误差不能高于20米; 1:50万的地质图,配准误差不能高于50米. 扫描质量很好的原始图件,只需要4个以上的控制点用一次配准就可达到精度要求;扫描质量不好的原始图件,必须要用二次甚至三次配准,在ArcGIS中,至少6个控制点才能进行二次配准,至少10个控制点才能进行三次配准.控制点要均匀分布在图面上.为了配准的方便,在配准之前,还有必要用

从xfire谈WebService接口化编程

前段时间有博友在看我的博文<WebService入门案例>后,发邮件问我关于WebService 接口在java中的开发,以及在实际生产环境中的应用.想想自己入职也有一段时间了,似乎也该总结一下自己对于接口化开发的认识,以及如何利用java开发一些可以供其他应用程序使用的web服务. 其实最开始对Web服务的认识还是在课堂上,老师反复地在讲SOAP协议,其实也不懂究竟是什么意思,无缘无故就在大脑中形成了条件反射,SOAP协议的中文意思就是简单对象访问协议:而且,更加巧合的是自己在求职面试时就被

python中numpy对函数进行矢量化转换

在对numpy的数组进行操作时,我们应该尽量避免循环操作,尽可能利用矢量化函数来避免循环. 但是,直接将自定义函数应用在numpy数组之上会报错,我们需要将函数进行矢量化转换. def Theta(x): """ Scalar implemenation of the Heaviside step function. """ if x >= 0: return 1 else: return 0 Theta(array([-3,-2,-1,0

JQUERY下的组件化编程之基本框架

var PROWEBAPPS = (function(){ var module = { ViewManager:(function(){ var submodule = { activate:function(){ console.log("main..."); } }; return submodule; })(), }; return module; })(); $(document).ready(function(){       PROWEBAPPS.ViewManager.