线性解码器——解决数据缩放问题
来源:互联网 发布:专用发票数据导出 编辑:程序博客网 时间:2024/06/14 01:39
稀疏自编码器效果不错,但是有个固有缺陷:必须对输入数据的范围缩放到(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(:)];endfunction sigm = sigmoid(x) sigm = 1 ./ (1 + exp(-x));end
图像是彩色的,所以有3通道,输入维数8*8*3,原始图像样例如图1
图1
在使用了ZCA之后,图像变得锐利了,如图2
图2
通过线性解码器,可以学习得到400个特征如图3
图3
欢迎参与讨论并关注本博客和微博以及知乎个人主页后续内容继续更新哦~
转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!
0 0
- 线性解码器——解决数据缩放问题
- mina解决粘包,找不到解码器,数据帧重传的问题
- UFLDL——Exercise: Linear Decoders 线性解码器
- UFLDL教程—自编码线性解码器学习
- 解决视频播放器找不到解码器问题
- 解决html网页缩放问题
- Stanford UFLDL教程 线性解码器
- matlab解决线性神经网络问题
- UIImage缩放,解决模糊失真问题
- 解码器的问题
- OpenCV 读取视频——FMP4解码器
- 语义缩放中数据不能定位问题
- Netty学习(四)—LengthFieldBasedFrameDecoder解码器
- 数据导论——线性表
- 解决windows media player无法播放视频,下载解码器失败的问题!
- 解决skia静态库中关于jpeg/png编码解码器的全局变量的问题
- 【Netty4 简单项目实践】二、解决TCP连包问题:分隔符解码器
- 线性时间解决最大子数组问题
- centos 5.8 安装 mysql 5.6.20
- POJ--2516--Minimum Cost【最小费用最大流】
- html5 学习
- MySQL常用命令
- Drive C2X result may help navi software
- 线性解码器——解决数据缩放问题
- dfnggn
- poj 1017 Packets
- LeetCode-Count and Say
- 海峡股份
- [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
- 神挡杀神
- 从零开始学android<ListView数据列表显示组件.二十一.>
- hdu 1559最大子矩阵