自我学习(Self-Taught Learning)

自我学习就是把稀疏自编码器与Softmax回归分类器串联起来。

稀疏编码器是用来无监督学习的,使用无标签数据

回归分类器是有监督学习,使用标签数据

实际生活中,我们能轻松获得大量无标签数据(如从网上随机下载海量图片)

难以获得大量有标签数据(有标签的数据库通常不会太大,而且很贵

如果我们手头上只有少量标签数据,但是有大量的无标签数据,这是就可以采用自我学习的方式,得到有用的特征,进而获得比单纯Softmax好得多的效果。

我们还是用MINST数据库,我们把0~4这些手写体数据作为无标签数据;把5~9这些手写体数据再次一分为二,一部分为测试数据,一部分为验证数据。

程序方面因为有了前面几节的基础,把相关函数调用一下就好:

minFunc
display_network
initializeParameters
loadMNISTImages
loadMNISTLabels
softmaxCost
softmaxPredict
softmaxTrain
sparseAutoencoderCost
train-images.idx3-ubyte
train-labels.idx1-ubyte

各个部分的核心代码如下

stlExercise

opttheta = theta;
addpath minFunc/
options.Method = 'lbfgs';
options.maxIter = 400;
options.display = 'on';
[opttheta, cost] = minFunc( @(p) sparseAutoencoderCost(p, ...
                                   inputSize, hiddenSize, ...
                                   lambda, sparsityParam, ...
                                   beta, unlabeledData), ...
                              theta, options);

feedForwardAutoencoder

activation=sigmoid(bsxfun(@plus,W1*data,b1));

训练Softmax分类器

options.maxIter = 100;
softmaxModel = softmaxTrain(hiddenSize, numLabels, 1e-4, ...
                            trainFeatures,trainLabels, options);

给出推断

[pred] = softmaxPredict(softmaxModel,testFeatures);

需要注意区分的几个变量,有可能弄混

trainData
trainLabels
testData
testLabels
trainFeatures
testFeatures

本次试验消耗的计算时间是很长的,Andrew表示

For us, the training step took less than 25 minutes on a fast desktop.

在我Thinkpad i5上测试结果是半小时左右,我不小心手一滑,覆盖了原先数据,又消耗了半小时。。。

半小时过后,可以瞧瞧稀疏自编码器学习到的特征

图1

最后的运行效果很不错,相比Softmax有了很大提升:

Test Accuracy: 98.215453%

欢迎参与讨论并关注本博客微博以及知乎个人主页后续内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!

自我学习(Self-Taught Learning)

时间: 2024-10-08 23:59:29

自我学习(Self-Taught Learning)的相关文章

UFLDL教程笔记及练习答案三(Softmax回归与自我学习)

1:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归.教程中已经给了cost及gradient的求法.需要注意的是一般用最优化方法求解参数theta的时候,采用的是贝叶斯学派的思想,需要加上参数theta. 习题答案: (1) 数据加载------代码已给 (2) %% STEP 2: Implement softmaxCost   得到计算cost和gradient M = theta

UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)

1:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归. 教程中已经给了cost及gradient的求法.须要注意的是一般用最优化方法求解參数theta的时候,採用的是贝叶斯学派的思想,须要加上參数theta. softmax回归 习题的任务就是用原有的像素数据集构建一个softmax回归模型进行分类.准确率略低 92.6%,. 而自我学习是用5~9之间的数据集当做无标签的数据集,然后构建

UFLDL深度学习教程翻译之自我学习

一.概述 假设我们有足够强大的学习算法,得到较好结果的其中一种最靠谱的方法是给算法提供更多的数据.这验证了在机器学习的那句格言:"有时候获胜的不是谁有最好的算法,而是谁有最多的数据." 也许有人总能得到有标记的数据,但这么做成本很高.特别地,研究人员已经采用极致的工具例如AMT(亚马逊土耳其机器人)来得到大量训练集.尽管拥有大量的人们人工标记的数据相比拥有大量的研究人员的工程性质的特征已经迈进了一步,但还能做的更好.特别地,自我学习以及无监督特征学习的方法是说,如果我们让我们的算法从无

计算机可以这样玩—自我学习,自我思维,自我工作(编程)

如果让计算机产生自我意识,那一定件很好玩的事情. 我在想,怎么让计算机产生自我意识和自我学习的思维能力呢,特别是在工业集群中的应用. 由这个问题,我们先问问人类是怎么自我产生意识的. 人类的自我意识主要是客观或主观环境刺激或引导而产生了自我神经思维能力的,对吧. 那么这样就很好理解了,机器同样可以产生自我意识和自我学习的过程. 现在我们来造这个机器,   首先是cpu的问题,如果以目前的二进制cpu来做,肯定是做不做的:因此我们首先否定现有的cpu所有的工艺方式.               那

多视图学习(multiview learning)

多视图学习(multi-view learning) 前期吹牛:今天这一章我们就是来吹牛的,刚开始老板在和我说什么叫多视图学习的时候,我的脑海中是这么理解的:我们在欣赏妹子福利照片的时候,不能只看45度角的吧,要不那样岂不是都是美女了,这还得了.所以我们要看各个角度的照片,打击盗版美女,给大家创建一个真诚的少点欺骗的和谐世界.所以说,多视图学习就是360度,全方位无死角的欣赏(学习)然后得到最接近真实值的判定. 话说那么一天啊,一个人和一个蚂蚁在对话,他们看着一个米饭粒,人说,这个米饭粒胖嘟嘟的

【转载】 无监督特征学习——Unsupervised feature learning and deep learning

无监督特征学习——Unsupervised feature learning and deep learning 分类: Compression Computer Vision Machine Learning 杂感2012-07-31 15:48 36848人阅读 评论(61) 收藏 举报 目录(?)[+] 无监督学习近年来很热,先后应用于computer vision, audio classification和 NLP等问题,通过机器进行无监督学习feature得到的结果,其accurac

c++ 概念及学习/c++ concept&learning(三)

这一篇继续说说程序设计中的基本语句:控制块 一 if类控制语句 if if else if  , else if ,else if(条件语句){如果条件为真,要做的一些事情}  if(条件语句) {如果条件为真,要做的一些事情} else{如果条件为假,要做的一些事情} if (条件语句1){  如果条件为真1,要做的一些事情} else{ 如果条件都为假时,要做的一些事情} 1 #include "stdafx.h" 2 #include <iostream> 3 4 i

智能机器人的高级阶段:不受人工控制的自我学习

文/辛东方,80后作家.专栏作者.专注互联网科技领域 "人工智能""一词的提出发展到现在,已经走过六十多个春秋.期间,各国的人工智能技术都在缓慢的进行着,发展虽然缓慢,但毕竟都是一直前进的. 按照一般的看法,人工智能是对人的意识.思维的信息过程的模拟.人工智能不是人的智能,但能像人那样思考.也可能超过人的智能.但初级阶段的人工智能是按照人的工程程序设置,到如果人工智能发展到高级阶段,有些模式可能会发生改变. 机器人技术是人工智能的体现,1920年,"机器人"

c++ 概念及学习/c++ concept&amp;learning(一)

学习过计算机组成原理就会知道,处理器会从主存中取得指令,然后进行解释执行.而他们的交流方式是以二进制方式进行的,也就是他们只能识别1和0 :其实计算机是不知道1和0的,现在的实现方式是以高电压与低电压来代表1/0.CPU会从主存中取出指令进行执行.这样整个计算机就可以运行起来. 计算机作为为人服务的机器,必须接受人的控制.所以最初的"程序"是一种打孔的卡片.读卡机将"程序"读入,CPU进入执行.可想而知,这种" 程序"是物理的,假如上百行的代码,