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绝佳的入门资料 )的更多相关文章

  1. 论文笔记: Deep Learning based Recommender System: A Survey and New Perspectives

    (聊两句,突然记起来以前一个学长说的看论文要能够把论文的亮点挖掘出来,合理的进行概括23333) 传统的推荐系统方法获取的user-item关系并不能获取其中非线性以及非平凡的信息,获取非线性以及非平 ...

  2. 深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes

    来自:CVPR 2014   作者:Yi Sun ,Xiaogang Wang,Xiaoao Tang 题目:Deep Learning Face Representation from Predic ...

  3. (转)Deep Learning深度学习相关入门文章汇摘

    from:http://farmingyard.diandian.com/post/2013-04-07/40049536511 来源:十一城 http://elevencitys.com/?p=18 ...

  4. (转)深度学习(Deep Learning, DL)的相关资料总结

    from:http://blog.sciencenet.cn/blog-830496-679604.html 深度学习(Deep Learning,DL)的相关资料总结 有人认为DL是人工智能的一场革 ...

  5. Deep Learning(深度学习)学习笔记整理

    申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. 【转载】Deep Learning(深度学习)学习笔记整理

    http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...

  8. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. Deep Learning深入研究整理学习笔记五

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. UVALive 6915 Leveling Ground 倍增RMQ

    Leveling Ground 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid ...

  2. Docker系列之(四):Win10上运行Docker

    1. 前言 Docker最近推出了可以运行在Win10和Mac上的稳定版本,让我们赶紧来体验一下. 2. 安装准备 需要的条件为: 64bit Windows 10,开启Hyper-V 2.1 下载D ...

  3. Android中使用隐藏API(大量图解)

    Android SDK的很多API是隐藏的,我无法直接使用.但是我们通过编译Android系统源码可以得到完整的API. 编译Android系统源码后可以在out\target\common\obj\ ...

  4. One-wire Demo on the STM32F4 Discovery Board

    One-wire Demo on the STM32F4 Discovery Board Some of the devs at work were struggling to get their s ...

  5. 使用 NuGet 管理我们的程序集 - 预发行版

    1.缘起 在我们的项目中.须要引用的组件统一放在一个 Libs 文件夹下.不管对于平台上的公共组件.还是应用模块,都是如此. 假设一个应用模块,比如能源管理(EM).要引用平台提供的公共组件,比如数据 ...

  6. Revit API过滤元素类别(FamilySymbol与FamilyInstance)

    仅OfCategory()过滤的元素包含系统FamilySymbolOfClass(typeof(FamilyInstance))过滤出来文档中族实例. ;         ;         ;   ...

  7. 如何:为iOS 的方法写注释 让xcode 能够索引得到?

    如何:为iOS 的方法写注释 让xcode 能够索引得到? 按照如下方法为ios项目写注释: 将会让xcode能够索引得到如下结果:

  8. SharePoint Online 创建文档库

    前言 本文介绍如何在Office 365中创建文档库,以及文档库的一些基本设置. 正文 通过登录地址登录到Office 365的SharePoint Online站点中,我们可以在右上角的设置菜单中, ...

  9. 暴君第一季/全集Tyrant迅雷下载

    本季第一季 Tyrant Season 1 (2014)看点:虽然李安退出了FX系列剧<暴君>(Tyrant),称不想耽误了剧集的制作,但显然FX对这部剧的重视程度非比寻常,因为他们找来的 ...

  10. ExtJS 4.2 教程-01:Hello ExtJS

    转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-1-hello-extjs, 本文还发布在了ExtJS教程网站起飞网上面,如果转载请保留本段声明,谢谢合作 ...