转:UFLDL_Tutorial 笔记(deep learning绝佳的入门资料 )
http://blog.csdn.net/dinosoft/article/details/50103503
推荐一个deep learning绝佳的入门资料
* UFLDL(Unsupervised Feature Learning and Deep Learning)教程 http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B
故意把链接地址也写出来,方便看到来源,嘿嘿。
资料写得相当赞,还有中文版。看懂里面的idea是很快,exercise要写的话就得把公式细节搞搞清楚了,一定要做一下,加深理解。代码我是不会贴的,记录一些有的没的吧。特别是用octave遇到的坑,用matlab貌似是没有的,(哭
一开始用octave,因为coursera的那个课程就用octave。后来慢慢发现不对劲,UFLDL这个课程用的是matlab,而且要64bit的,不然可能内存不够。哎,发现免费的东西有时候确实不太行。
一些小技巧
- return 命令中间退出。先调试前几个step的时候有用。
- pause() 中间停住。任意键继续。不想继续就ctrl+c退出。哎,原来matlab有节的概念,就没这个问题,可以按小节运行。
- fflush(stdout) 不要缓冲了,赶紧输出迭代进度。
- close all 弹出好多figure,一个一个点太麻烦了。
Exercise:Sparse Autoencoder
直接跑发现有问题,挺烦的,原本公式就有点乱的,容易写错,还要整一些语言的问题。我的环境是win10 + octave 4.0,调用lbfgsC.c有问题,会出现lbfgsC undefined的问题,只能自己编译一下了。虽然把代码里面的lbfgsC改成lbfgs是能跑,但貌似太慢了。minFunc.m里面可以在fprintf迭代次数Iteration之后加上fflush(stdout);不然输出不及时,等得蛋疼,都不知是挂了还是怎样。
lbfgsC.mex*是供matlab/octave调用的c接口。minFunc的主页。下载下来后改改mexAll.m,然后就可以编译,没啥坑爹的依赖问题。然后把*.mex 文件拷贝到starter/minFunc就行了。
另外display_network 第93行
h=imagesc(array,'EraseMode','none',[-1 1]);
%改成
h=imagesc(array,[-1 1] ,'EraseMode','none');
- 1
- 2
- 3
- 1
- 2
- 3
Exercise:Vectorization
主代码从train.m拷一份,不过注意,把computeNumericalGradient这个过程注释掉,这个太费时了,上个实验已经验证好了。
lbfgsC: failed to allocate xxx bytes of memory
还以为内存不够,换到8G内存的机器还是不行。
看文档的faq。train.m文件要加上options.Corr=9;选项。
error: out of memory or dimension too large for Octave's index type
error: called from
loadMNISTImages at line 17 column 8
- 1
- 2
- 3
- 1
- 2
- 3
貌似有内存泄露什么鬼,执行clear -a 清一下空间就可以了,蛋疼。之前都是直接关掉octave重启。octave的gui后来也不行了,换cli吧。
PCA
像mean(M, 2)这种函数怎么理解? 按第二维进行聚合,就是”干掉”某一维。算平均数是按什么维度来求平均要想好。
- 白化(whitening) pca后的特征方差归一(所以缩放因子是1/sqrt(λ)),直观上数据在一个n维“正方体”。
- ZCA白化 数据坐标旋转到源数据方向一致(PCA后坐标轴变成主特征向量方向)。通常保留全部n维
Exercise:Softmax Regression
有没发现训练完,predict的时候其实没必要算exp(θx),直接θx就可以了,函数单调,而且最后求的是argmax。但训练的时候不能简化。
%提示 help max
[v idx] = max(a, [],1)
- 1
- 2
- 1
- 2
Exercise:Self-Taught Learning
error: out of memory or dimension too large for Octave's index type
- 1
- 1
这回貌似是2G地址不够用了,要64位的才行,总之win上要编译64位的挺麻烦,而且看了资料,即使是64位的内部也不是完全都64位化,蛋疼。matlab好像就没有这个问题,太大不想装。直接数据改小吧。
unlabeledData = unlabeledData(:, 1:5000);
%Test Accuracy: 98.280821%
5000就好了,反正结果也还不差。
%小技巧,训练实在太久,可以把结果保存起来,免得挂了重来
save opttheta
load opttheta
- 1
- 2
- 3
- 1
- 2
- 3
Exercise: Implement deep networks for digit classification
提醒注意两个地方:
1. We have implemented checkStackedAECost.m to help you check your gradients.
2. When adding the weight decay term to the cost, you should regularize only the softmax weights (do not regularize the weights that compute the hidden layer activations).
坑爹的,octave跑6w样本实在跑不动,到这里我才发现课程是针对matlab设计的。没注意第二点,隐藏层的weight是不需要正则化,2w样本跑出来准确率只有不到92%,就想验证一下是不是数据量太少的缘故(心里也没谱,因为之前用少量数据准确率没有掉得很厉害),后面实在不行,就装了matlab 64bit,整整7G多。跑了6w数据,准确率还是那么低才死心。仔细查出来忘记看第二点了,果然欲速则不达啊。
Exceeded Maximum Number of Iterations
Before Finetuning Test Accuracy: 87.300%
After Finetuning Test Accuracy: 97.880%
- 1
- 2
- 3
- 1
- 2
- 3
四个过程迭代次数分别是400,400,100,200。看准确率应该对的。先试了一下3000个数据,准确率有92%多。果然数据多才是王道。
2w数据的话(Octave跑得动,看来matlab不是必须的)
Before Finetuning Test Accuracy: 87.880%
After Finetuning Test Accuracy: 96.820%
- 1
- 2
- 1
- 2
所以1-2w数据在95%+是正常的,92%以下就要查查了。
Exercise:Learning color features with Sparse Autoencoders
这个容易,没啥好说的。
Exercise:Convolution and Pooling
以为很简单,可以秒杀,结果坑爹的。。
1. 一个问题是channel。一下子有点懵,明明上一个exercise是3个channel合并到一起的,怎么要拆开了?其实没有大的变动,就是要自己做一些数值计算合并的动作。还以为上一步的东西要改改啥的。
2. conv2函数。没用过,其实就是帮你把恶心的for循环给实现了。我是先构造了简单的矩阵来试试conv2函数。文档已经提示你要用valid参数了,再help conv2一下看看怎么配就可以了。step 3 stepSize=50居然跑不动,改成20了,数字要整除400才行。好慢,跑了近40分钟。
小结
果然动手写写代码能加深印象,调试代码才是最费时间精力的。比如softmax那里多写了一个log,调试得半死,关键是不知道到底那里错了。
另外就是训练跑起来特别费时,用cuda貌似可以加速。后面准备用theano试试看
转:UFLDL_Tutorial 笔记(deep learning绝佳的入门资料 )的更多相关文章
- 论文笔记: Deep Learning based Recommender System: A Survey and New Perspectives
(聊两句,突然记起来以前一个学长说的看论文要能够把论文的亮点挖掘出来,合理的进行概括23333) 传统的推荐系统方法获取的user-item关系并不能获取其中非线性以及非平凡的信息,获取非线性以及非平 ...
- 深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes
来自:CVPR 2014 作者:Yi Sun ,Xiaogang Wang,Xiaoao Tang 题目:Deep Learning Face Representation from Predic ...
- (转)Deep Learning深度学习相关入门文章汇摘
from:http://farmingyard.diandian.com/post/2013-04-07/40049536511 来源:十一城 http://elevencitys.com/?p=18 ...
- (转)深度学习(Deep Learning, DL)的相关资料总结
from:http://blog.sciencenet.cn/blog-830496-679604.html 深度学习(Deep Learning,DL)的相关资料总结 有人认为DL是人工智能的一场革 ...
- Deep Learning(深度学习)学习笔记整理
申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- 【转载】Deep Learning(深度学习)学习笔记整理
http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...
- Deep Learning(深度学习)学习笔记整理系列之(八)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning深入研究整理学习笔记五
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
随机推荐
- Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现
前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...
- JDK7新特性<八>异步io/AIO
概述 JDK7引入了Asynchronous I/O.I/O编程中,常用到两种模式:Reactor 和 Proactor.Reactor就是Java的NIO.当有事件触发时,我们得到通知,进行相应的处 ...
- 在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案
Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象. 正好今天有这样的需求,使用一下,结果一直报415,十分头疼. HTTP 415 错误 – 不支持的媒体类型 ...
- 让Win2008+IIS7+ASP.NET支持10万并发请求
今天下午17点左右,博客园博客站点出现这样的错误信息: Error Summary: HTTP Error 503.2 - Service Unavailable The serverRuntime@ ...
- 如何调整word中表格某一列占半分比
1.可以拖动,但是不准确 2.
- 树莓派创始人访谈:我们是怎么让大家都成为DIY黑客的
原文出处: Linux.CN 请记住它是为喜欢折腾的人准备的只要35美元的计算机 我永远不会忘记我第一次看到树莓派的情形.那个小巧的,信用卡大小的计算机,性能却足够强劲,可以作为一般家用PC,媒体中心 ...
- Sales Order ORA-04062 FRM-40815 in EBS R12.2.4
[oracle@ebs ~]$ su - oracle [oracle@ebs ~]$ source /u01/install/VISION/fs1/EBSapps/appl/APPSEBSDB_eb ...
- Unity3D导入3DMax模型缩放单位问题深入分析
“Unity3D导入3DMax制作的模型存在100倍缩放比例”,各Unity3D开发者基本都听过吧. 怎么保证3DMax中制作的1m导入Unity3D后还是1m? 为什么会存在100倍缩放问题? 怎么 ...
- [Web 前端] Jquery 复制元素,并修改属性, 追加到另一个元素后面
cp from : https://blog.csdn.net/cooledi/article/details/52813668 jquery 复制元素,并修改属性 $('#ID').clone() ...
- JavaScript 中的异常处理
考虑到 JS 中的错误可比服务器端的代码产生的错误要多得多,并且还难以发现及修正,所以 JS 代码必须有异常处理以及全局一场处理. try { //这段代码从上往下运行,其中任何一个语句抛出异常该代码 ...