线性解码器——解决数据缩放问题

稀疏自编码器效果不错,但是有个固有缺陷:必须对输入数据的范围缩放到(0,1)。

设想一个图像如果不经预处理,直接把大于1的值输入稀疏自编码器,那么被sigmoid一下,就成了(0,1)的范围了,再被sigmoid一下,还是在(0,1)范围。这样残差根本没办法算,因为经过了sigmoid变换之后的数据已经不可能与输入数据相等了。

但是如果我们把第三层,原先的sigmoid函数换成恒等函数,事情就发生了变化。

这样我们就能用实值输入,不需要放缩样本到(0,1)范围,比如这在处理彩色图像、PCA白化时是很难做到的。

因此我们只需要再对稀疏自编码算法的最后一层的残差稍作修改即可

代码如下

function [cost,grad,features] = sparseAutoencoderLinearCost(theta, visibleSize, hiddenSize, ...
                                                            lambda, sparsityParam, beta, patches)

W1 = reshape(theta(1:hiddenSize*visibleSize), hiddenSize, visibleSize);
W2 = reshape(theta(hiddenSize*visibleSize+1:2*hiddenSize*visibleSize), visibleSize, hiddenSize);
b1 = theta(2*hiddenSize*visibleSize+1:2*hiddenSize*visibleSize+hiddenSize);
b2 = theta(2*hiddenSize*visibleSize+hiddenSize+1:end);

cost = 0;
W1grad = zeros(size(W1));
W2grad = zeros(size(W2));
b1grad = zeros(size(b1));
b2grad = zeros(size(b2));

numpatches=size(patches,2);
a2=sigmoid(W1*patches+repmat(b1,1,numpatches));
a3=W2*a2+repmat(b2,1,numpatches);%更改
Rho=sum(a2,2)/numpatches;
Penalty=-sparsityParam./Rho+(1-sparsityParam)./(1-Rho);
Delta3=(a3-patches);%更改
Delta2=(W2'*Delta3+beta*repmat(Penalty,1,numpatches)).*a2.*(1-a2);
cost1=sumsqr(a3-patches)/numpatches/2;
cost2=(sumsqr(W1)+sumsqr(W2))*lambda/2;
cost3=beta*sum(sparsityParam*log(sparsityParam./Rho)+(1-sparsityParam)*log((1-sparsityParam)./(1-Rho)));
cost=cost1+cost2+cost3;
W2grad=Delta3*a2'/numpatches+lambda*W2;
b2grad=sum(Delta3,2)/numpatches;
W1grad=Delta2*patches'/numpatches+lambda*W1;
b1grad=sum(Delta2,2)/numpatches;

grad = [W1grad(:) ; W2grad(:) ; b1grad(:) ; b2grad(:)];
end

function sigm = sigmoid(x)

    sigm = 1 ./ (1 + exp(-x));
end

图像是彩色的,所以有3通道,输入维数8*8*3,原始图像样例如图1

图1

在使用了ZCA之后,图像变得锐利了,如图2

图2

通过线性解码器,可以学习得到400个特征如图3

图3

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

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

线性解码器——解决数据缩放问题

时间: 2025-01-12 17:00:36

线性解码器——解决数据缩放问题的相关文章

深度学习实现彩色图像特征提取:线性解码器

在前面的讨论中,用到的激励函数都是sigmoid函数: 以为最终的输出层所有输出的范围是[0,1],而我们在自编码学习的动机就是使得输出等于输入,于是所有输入必须调整到[0,1]范围内,但是问题来了,有些数据集输入范围容易调整,比如Minist,但是PCA白化处理的输入并不满足[0,1],所以需要找到一种能够处理非[0,1]范围内的机制. 为了解决这个问题,我们让输出层的输出和该层输入相等:a(3) = z(3),这就相等于把激励函数改为 f(z) = z,称这个激励函数为 线性激励函数,这样就

UFLDL教程笔记及练习答案五(自编码线性解码器与处理大型图像)

自动编码线性解码器 自动编码线性解码器主要是考虑到稀疏自动编码器最后一层输出如果用sigmoid函数,由于稀疏自动编码器学习是的输出等于输入,simoid函数的值域在[0,1]之间,这就要求输入也必须在[0,1]之间,这是对输入特征的隐藏限制,为了解除这一限制,我们可以使最后一层用线性函数及a = z 习题答案: SparseAutoEncoderLinerCost.m function [cost,grad,features] = sparseAutoencoderLinearCost(the

Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

 Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halcon 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] HWindowControl控件初步使用 最近在学习新的视觉处理工具–Halcon软件包,本人学习的主要是HDevelop.Halcon与C#混编以及Halcon与C++混编.这里再多缀一句:11版本后C++编程,包含的是h

解决数据架构难点数据分布的六种策略

1.1. 解决数据架构难点数据分布的六种策略 from:PYY 数据分布的六种策略 1)       独立Schema(Separate-schema) 2)       集中(Centralized) 3)       分区(Partitioned) 4)       复制(Replicated) 5)       子集(Subset) 6)       重组(Recorganized) 1.1.1.   独立Schema(Separate-schema) 当一个大系统由相关的多个小系统组成,

ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault的问题

解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault. 打印下得到的字典数据: “username”=<null> 此时如果将字典保存到userDefault中会报错 所以需要遍历字典将其替换 for (NSString*s in [Dict1 allKeys]) { if ([Dict1[s] isEqual:[NSNull null]]) { [Dict1 setObject:@""

Spark性能调优之解决数据倾斜

Spark性能调优之解决数据倾斜 数据倾斜七种解决方案 shuffle的过程最容易引起数据倾斜 1.使用Hive ETL预处理数据    ? 方案适用场景:如果导致数据倾斜的是Hive表.如果该Hive表中的数据本身很不均匀(比如某个 key对应了100万数据,其他key才对应了10条数据),而且业务场景需要频繁使用Spark对Hive表 执行某个分析操作,那么比较适合使用这种技术方案.    ? 方案实现思路:此时可以评估一下,是否可以通过Hive来进行数据预处理(即通过Hive ETL预先对

压缩Sqlite数据文件大小,解决数据删除后占用空间不变的问题

最近有一网站使用Sqlite数据库作为数据临时性的缓存,对多片区进行划分 Sqlite数据库文件,每天大概新增近1万的数据量,起初效率有明显的提高,但历经一个多月后数据库文件从几K也上升到了近160M,数据量也达到了 40多万条,平均每一条数据占用了 4K的空间,虽然使用上的效率直观上没有造成太大的影响,但服务器的占用内存却比原来多占用了20%左右.今天刚好打算清除一个Sqlite的冗余数据, 将保留最近10天的数据就可以了,结果执行了删除指令delete后删除30多万条数据保留了10多万数据,

.net解决数据导出excel时的格式问题

在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式. 下面简单介绍一下以上问题的解决方法: 1.首先,了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读 取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果 c

hive使用技巧(四)——巧用MapJoin解决数据倾斜问题

相关文章推荐: hive使用技巧(一)自动化动态分配表分区及修改hive表字段名称 hive使用技巧(二)--共享中间结果集 hive使用技巧(三)--巧用group by实现去重统计 hive使用技巧(四)--巧用MapJoin解决数据倾斜问题 Hive的MapJoin,在Join 操作在 Map 阶段完成,如果需要的数据在 Map 的过程中可以访问到则不再需要Reduce. 小表关联一个超大表时,容易发生数据倾斜,可以用MapJoin把小表全部加载到内存在map端进行join,避免reduc