最近想在深入学习研究,开始看UFLDL(unsuprisedfeature learning and deep learning)教程了。特将课后习题答案放在这里,作为一个笔记。

笔记:

1:自编码算法是一个无监督学习算法。它通过学习hw,b(x) = x,因此最后的outputlayer单元数与inputlayer单元数量相等,而中间的hiddenlayer能够非常大。这是加个稀疏惩处项,就相当于使中间非常多结点的激励值为0。这样就是类似于PCA了。算法就是反向传播,这里不做介绍。能够看教程!

2:可视化自编码器,习题中可视化的是W1,即须要学习的參数W1。

这个我不是非常理解,后来想了想,因为输入的是图像的一个个像素点,那么每个hidden
layer 如a1 (2)= w11x1+w12*x2+w13*x3+…,~~不太理解,接着学习后面的看。

练习答案:

1:稀疏自编码器

Step1:在sampleIMAGES.m文件里获取生成训练集的代码,当中tic和toc是用来记时用的。

tic
image_size=size(IMAGES);
i=randi(image_size(1)-patchsize+1,1,numpatches); %产生1*10000个随机数 范围在[1,image_size(1)-patchsize+1]之间
j=randi(image_size(2)-patchsize+1,1,numpatches);
k=randi(image_size(3),1,numpatches); % 随机的选取图片 10000次
for num=1:numpatches
patches(:,num)=reshape(IMAGES(i(num):i(num)+patchsize-1,j(num):j(num)+patchsize-1,k(num)),1,patchsize*patchsize);
end
toc

Step2:在sparseAutoencoderCost.m文件里完毕前向传播和后向传播等相关代码

%1.forward propagation
data_size=size(data); % [64, 10000]
active_value2=repmat(b1,1,data_size(2)); % 将b1扩展10000列 25*10000
active_value3=repmat(b2,1,data_size(2)); % 将b2扩展10000列 64*10000
active_value2=sigmoid(W1*data+active_value2); %隐结点的值 矩阵表示全部的样本 25*10000 一列表示一个样本 hidden
active_value3=sigmoid(W2*active_value2+active_value3); %输出结点的值 矩阵表示全部的样本 64*10000 一列表示一个样本 output
%2.computing error term and cost
ave_square=sum(sum((active_value3-data).^2)./2)/data_size(2); %cost第一项 最小平方和
weight_decay=lambda/2*(sum(sum(W1.^2))+sum(sum(W2.^2))); %cost第二项 全部參数的平方和 贝叶斯学派 p_real=sum(active_value2,2)./data_size(2); % 稀疏惩处项中的预计p 为25维
p_para=repmat(sparsityParam,hiddenSize,1); %稀疏化參数
sparsity=beta.*sum(p_para.*log(p_para./p_real)+(1-p_para).*log((1-p_para)./(1-p_real))); %KL diversion
cost=ave_square+weight_decay+sparsity; % 终于的cost function delta3=(active_value3-data).*(active_value3).*(1-active_value3); % 为error 是64*10000 矩阵表示全部的样本,每一列表示一个样本
average_sparsity=repmat(sum(active_value2,2)./data_size(2),1,data_size(2)); %求error中的稀疏项
default_sparsity=repmat(sparsityParam,hiddenSize,data_size(2)); %稀疏化參数
sparsity_penalty=beta.*(-(default_sparsity./average_sparsity)+((1-default_sparsity)./(1-average_sparsity

Step3:梯度检验

EPSILON=0.0001;
for i=1:size(theta)
theta_plus=theta;
theta_minu=theta;
theta_plus(i)=theta_plus(i)+EPSILON;
theta_minu(i)=theta_minu(i)-EPSILON;
numgrad(i)=(J(theta_plus)-J(theta_minu))/(2*EPSILON);
end

Step4:可视化,训练train.m的时候,要将相关梯度校验相关代码去掉,由于这部分代码比較耗时间。

2:矢量化编程实现

这个仅仅须要在以上的代码中略做改动就可以。

Step1:首先将參数设置为

visibleSize = 28*28;   % number of input units
hiddenSize = 196; % number of hidden units
sparsityParam = 0.1; % desired average activation of the hidden units.
% (This was denoted by the Greek alphabet rho, which looks like a lower-case "p",
% in the lecture notes).
lambda = 3e-3; % weight decay parameter
beta = 3; % weight of sparsity penalty term

Step2:将稀疏编码器中的step1获取训练集的方式换成以下代码:

images = loadMNISTImages('train-images.idx3-ubyte');

display_network(images(:,1:100)); % Show the first 100 images
patches = images(:, randi(size(images,2), 1, 10000));

这样就能够得到下面可视化的结果了:

版权声明:本文博主原创文章,博客,未经同意不得转载。

UFLDL接听教程练习(来自编码器和矢量编程疏)的更多相关文章

  1. 矢量编程——随着MNIST案例

    矢量编程使用的所有明确的矢量运算,而不是for周期. 上一节所用的是512*512*10的数据集非常小.我们取的patch非常小(8*8),学来的特征非常少(25).而我又凝视掉了梯度校验(偷懒),所 ...

  2. Java NIO系列教程(八)JDK AIO编程

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  3. 来自Unix/Linux的编程启发录

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布重点内容 2017年第一篇文章,祝各位好友新年快乐. 年前因为不小心坐到了自己左手大拇指导致轻微的骨裂,没有按时更新,实在是羞愧.今年 ...

  4. MinGW安装图文教程以及如何配置C语音编程环境

    MinGW安装图文教程以及如何配置C语音编程环境 转载自:http://www.jb51.net/softjc/192017.html MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序 ...

  5. UFLDL新版教程

    http://ufldl.stanford.edu/tutorial/ 还带编程作业.

  6. 转+更新 Graphviz 教程,例子+ 高级应用 写代码,编程绘制架构图(分层拓扑图) 转自官网

    1. Graphviz介绍 Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具. 它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”. Graphviz提供了dot语言来 ...

  7. 《C#并行编程高级教程》第9章 异步编程模型 笔记

    这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...

  8. 《C#并行编程高级教程》第2章 命令式编程 笔记

    Parallel.Invoke 并行执行多个方法,只有在所有方法都执行后才会返回 static void Main(string[] args){    Parallel.Invoke(    () ...

  9. 一些matlab教程资源收藏,使用matlab编程的人还是挺多的

    Matlab教程专题资源免费下载整理合集收藏 <MATLAB从入门到精通>高清文字版[PDF] 103.9MB 简体中文 <矩阵实验室>(Mathworks.Matlab.R2 ...

随机推荐

  1. 可兼容IE的jquery.cookie函数方法

    前言 在开发过程中,因为之前有接触过Discuz,就直接拿其common.js里面的getcookie和setcookie方法来使用,做到后面在使用IE来测试的时候,发现这两个方法子啊IE下不起作用, ...

  2. 学习OpenCV第0天

    自2011年接触OpenCV已经有几年了,一直停留在写一些小程序,利用手冊完毕一些任务,一直没有深入研究当中代码,现在毕业,但各种原因未能进入图像处理行业,故现重学OpenCV,包含分析代码,学习算法 ...

  3. hdu1532 (最大流入门,EK算法)

    看着这个博客 然后敲了hdu1532这个入门题,算是对最大流有点理解了 #include <stdio.h> #include <string.h> #include < ...

  4. 【NOIP2002】矩形覆盖 DFS

    首先,我喜欢愤怒搜索,因为尽管说K<=4,的确K小于或等于3的. 当然某些K<=3还600ms的我就不加评论了. 好吧,可是怎么搜呢?我们考虑到矩形数量非常少,所以能够怒搜矩形. 一些神做 ...

  5. Hadoop认知--在不同的阶段

    入门阶段 出于兴趣,及工作中的简单有用,大约经过1个月的时间,完毕了对Hadoop的基本认知. 在这个月中我干了例如以下几件事 1.大体看了<Hadoop权威指南>.把里面的代码手工码了一 ...

  6. gradle(转)

    一.声明dependency     在build.gradle文件编辑以下代码: apply plugin: 'java' repositories { mavenCentral() } depen ...

  7. IOS本地化应用

    BK项目已完成7788,在项目的后期需要被翻译成多国语言版.为了适应全球多个国家使用多个存储. 应用本地化是分别对字符串.图片和 xib 或 storyboard 文件本地化,而传统的做法是对 xib ...

  8. 《深入了解mybatis原则》 MyBatis架构设计和案例研究

    MyBatis这是现在很流行ORM框架,这是非常强大.事实上现却比較简单.优雅. 本文主要讲述MyBatis的架构设计思路,而且讨论MyBatis的几个核心部件.然后结合一个select查询实例.深入 ...

  9. 修改字符串中特定的内容,用于OpenRecovery Script

    下面的是实例内容 目标是把OpenRecovery Script输入的内容进行修改 当有下面的输入:(作用是安装/emmc目录下面的update-signed.zip 刷机包) install /em ...

  10. 安装gcc 3.4

    安装   gcc 3.4 f**k,不是为了编译0.11内核.我才懒得鸟3.4的版本号 源代码编译被我实践--"不归路",各种报错,我起码不止是了4个版本号的gcc,各种不兼容.各 ...