最近复习一下之前看的深度学习的网络,在deeplearning-toolbox中看到一个CAE一时没想起来就看了一下官方的解释

CAE(Convolutional Auto-Encode) 卷积自编码 ,对于这个深度学习的网络的的解释很少。

下面谈一下自己的认识,算是总结吧

CAE(Convolutional Auto-Encode) 卷积自编码 :一种卷积自编码器,其实现的过程与Auto-Encode的思想是一致的

都是使用的是先编码在解码,比较解码的数据与原始的数据的差异进行训练,最后得到比较稳定的参数,待这一层的参数都训练好的时,再进行下一个的训练

如此堆积起来的网络看作是Stacked Auto-Encode 为了增加其抗干扰的能力,有时在训练时加入随机噪声进而增加其鲁棒性,称为Stacked denoise Auto-Encode。

但是今天要介绍的CAE只是加入了卷积的训练。其中主要思想是加入一些卷积的操作

1.CAE-UP 可以看做是卷积的的操作(在图像中进行卷积计算,得到卷积的图像)

2.CAE-Down 可以看做是一种翻卷的过程(在上层的基础之上,进行反卷积,得到原始的数据(肯定会有差距))

3.CAE-BP 可以看做是反向椽笔算法来计算残差,损失,计算出梯度与变化值。使用残差值对网络的参数进行更新。

主要的步骤就是这些,剩下的就是堆在一起了。

下面介绍一下在CAE中的数学计算

卷积层-卷积:初始化k个卷积核(W),每个卷积核搭配一个偏置b,与输入x卷积( ∗ )后生成k个特征图h,激活函数 σ 是 tanh 。公式如下:

池化层-池化操作(Max Pooling):  对上面生成的特征图进行池化操作,时要保留池化时的位置关系的矩阵,方便之后反池化的操作。

池化层-自编码(反池化操作):  对上面生成的特征图进行反池化操作,用到保留池化时的位置关系的矩阵,将数据还原到原始大小的矩阵的相应的位置(在此可以参考卷积神经网络的一些过程)。

卷积层-自编码(反卷积的操作):每张特征图h与其对应的卷积核的转置 进行卷积操作并将结果求和,然后加上偏置c,激活函数 σ 仍然是 tanh 。公式如下:

卷积层-更新权值:要更新权值,首先要确定cost function,此处作者采用的MSE(最小均方差)函数,即:目标值减去实际值的平方和再求均值,2n是为了简化求导。其中 θ是关于W和b的函数 。公式如下:

  但是会存在一种输入要与输出的维度一样才可以进行残差的计算,这个时候,就要对卷积的三种方式就要理清楚是怎样的操作的

卷积的三种操作: 假设原始图像的size是AxA的  卷积核的大小BxB 在计算时候对于边界如果需要进行边界补零操作

1.valid   得到的图像是 (A-B+1)x(A-B+1)

2.full    得到的图像是 (A+B-1)x(A+B-1)

3.same   得到的图像是   AxA

  确定好cost function以后,就是对W和b求导,公式如下:

  
   由于论文没有具体给出的值只是说: δh and δy are the deltas of the hidden states and the reconstruction, respectively

在此参考一下deeplearning-toolbox中的CAE的代码中,其对于卷积使用的full操作,而在进行down时使用的是valid,

这样就是的输入前与输入后保持一致的维度了。

caesdlm是进行梯度检测的

可以进行pooling 也可以选择不使用,只是用来减少参数的,其在计算中只是随机的将某些数据值置为0.

  Max pooling:引入Max pooling下采样技术,获取到特征的平移不变性。Max pooling就是pooling时选取最大值。由于采用了pooling技术,因此就没有必须使用L1/L2规则化项了。

文中的实验结果

  将上述卷积层和pooling层堆积起来,形成CAEs,最后加入SVMs或其他的分类器。据实验结果显示,CAEs在泛化性、鲁棒性方面表现特别好,尤其是在无监督训练界。

下面补充一下在DeepLearning-toolbox中的CAE的关键代码的解释:

1。caeexamples.m 入口

scae = {
    struct('outputmaps', 10, 'inputkernel', [1 5 5], 'outputkernel', [1 5 5], 'scale', [1 2 2], 'sigma', 0.1, 'momentum', 0.9, 'noise', 0)
};

用来定义cae的结构  outputmap 可以理解为卷积核的个数,inputkernel 卷积核的大小,scale池化的窗口大小。noise是否添加噪声

sigma在代码中没有用到(估计是用来计算更新学习率的参考caffe),momentum是用来对原始权重的保留权重。

2。 scaesetup网络参数初始化设置

cae = cae{l};
        ll= [opts.batchsize size(x{1}, 2) size(x{1}, 3)] + cae.inputkernel - 1;  %size  A+k-1 full
        X = zeros(ll); %init size
        cae.M = nbmap(X, cae.scale);%1*4*256
        bounds = cae.outputmaps * prod(cae.inputkernel) + numel(x) * prod(cae.outputkernel);% bounds 275

ll是存放的是卷积之后的图像的尺寸(这里使用的full是对图像进行增大的一种,感觉作者这样写是为了提取图像边缘的数据)

X是进行初始矩阵。cae.M是将图像的scale的大小进行分组列化,图像此时是32*32的,但是在池化时把4个像素点看做一组进行列化(4*256=32*32)的图像方便后面进行池化操作。

bounds的作用是进行卷积的初始化的操作,(本人不是很明白为什么要用这个)

cae.edgemask = zeros([opts.batchsize size(x{1}, 2) size(x{1}, 3)]);% 1*28*28
        cae.edgemask(ss(1) : end - ss(1) + 1, ...
                     ss(2) : end - ss(2) + 1, ...
                     ss(3) : end - ss(3) + 1) = 1;  % 20*20 个有效的作用

这个的操作是对28*28的矩阵中间的20*20的部分进行初始化为1,其他的是0

但是这样是为什么,难道只是把中间的20*20的元素看作是主要的影响银子吗。(这一点不明白)

3。caetrain 训练

cae = caeup(cae, x1);   %主要是进行卷积和maxpooling
        cae = caedown(cae);   %主要是进行反卷积还原图像
        cae = caebp(cae, x2);   %反向传播计算残差和权重的变化量
        cae = caesdlm(cae, opts, m);     %进行梯度检验
        cae = caeapplygrads(cae);         %梯度及偏置参数的更新

4。function X = max3d(X, M)
    ll = size(X);
    B=X(M);
    B=B+rand(size(B))*1e-12;
    B=(B.*(B==repmat(max(B,[],2),[1 size(B,2) 1])));
    X(M) = B;
    reshape(X,ll);
end
% compute reshape 4*256=32*32 
% 把图片分成4个像素一组,总共256组,
% 在计算时 取出每一组的最大值即完成最大池化
% 得到一个[0 1]的mask矩阵,然后与B进行相乘
% 可以的得到一个池化后的矩阵

其他的在此就不做解释了,可以参考卷积神经网络的计算。

代码的作者使用的对图像进行扩大的计算来最大可能的保留图像。

参考文献

[1]: Stacked Convolutional Auto-Encoders for Hierarchical Feature Extraction

CAE(Convolutional Auto-Encode) 卷积自编码相关推荐

  1. Convolutional Neural Networks卷积神经网络

    http://blog.csdn.net/zouxy09/article/details/8781543 9.5.Convolutional Neural Networks卷积神经网络 在数学上卷积是 ...

  2. Convolutional Neural Networks卷积神经网络(二)

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

  3. 基于卷积自编码网络结构的图像修复

    基于自编码器的生成网络 深度自编码器( DAE) 网络,图2 给出了一个5层的深度自编码器网络示意图,其隐层( L2 - L4)的节点数目由多到少,再由少到多,最后输出层节点与输入层节点的数目一致.本 ...

  4. Pytorch:基于转置卷积解码的卷积自编码网络

    Pytorch: 图像自编码器-卷积自编码网络(转置卷积解码)和图像去噪 Copyright: Jingmin Wei, Pattern Recognition and Intelligent Sys ...

  5. 数据矿工学习-样本自适应的在线卷积稀疏编码论文-个人中文翻译

    论文地址 : https://arxiv.org/abs/1804.10366 文中的数学公式符号并不能很好的显示,采用普通字母代替,故带有一定的误差,建议数学公式的推导还是回归论文查看. 简介 卷积 ...

  6. tf33: 图像降噪:卷积自编码

    MachineLP的Github(欢迎follow):https://github.com/MachineLP MachineLP的博客目录:小鹏的博客目录 以前打比赛的大师,做的卷积自编码用来图像的 ...

  7. FCN(Fully Convolutional Network)全卷积网络笔记

    FCN(Fully Convolutional Network)全卷积网络笔记 本文只是个人学习笔记 参考自: 全卷积网络FCN详细讲解(超级详细哦) 转置卷积(Transposed Convolut ...

  8. 【论文分享】联合形态学滤波和卷积稀疏编码的图像去雨

    [论文分享]联合形态学滤波和卷积稀疏编码的图像去雨

  9. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?

    前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ...

最新文章

  1. 2011 IBM IIS:聚百年智慧精髓 筑最优信息架构
  2. mysql5.7多实例安装_MySQL数据库5.7多实例安装
  3. 微信小程序 - vant popup弹出层阻止底层页面滑动
  4. MySQL INSERT:插入数据(添加数据)
  5. python3seek_Python seek()和tell()函数详解
  6. css框架和js框架_优雅设计的顶级CSS框架
  7. 解决Silverlight中DataGrid在显示数据时多一空白列
  8. 磁盘Raid方案简单对比
  9. 我的测试生活感悟2 - Art Of Unit Testing
  10. 手机号归属地_【号码归属地查询工具】
  11. 产品开发管理方法工具流程 pdf_HR必备薪酬和绩效管理方法论、工具、案例
  12. 二叉树中节点的最大的距离(编程之美3.8)
  13. SPSS 多重共线性问题【SPSS 039期】
  14. Unity3D 在 UI TextMeshPro (TMP) 中显示中文
  15. android 修改gps坐标,[原创] 改机 - 从源码着手任意修改GPS地理位置
  16. MATLAB在线网页链接使用
  17. 应届毕业生应该怎样写简历?
  18. 泛微工作流程管理解决方案(转载)
  19. 饥荒服务器文档,建立饥荒服务器
  20. 【数学】弧度和角度的转换

热门文章

  1. 元器件中电容的小小知识 2021-09-06
  2. 借助gdb调试glibc代码学习House of Orange
  3. CVE 2013-2094 exploit 实验笔记
  4. 问题-SecureCRT中文乱码
  5. 华擎主板bios设置图解_【华擎Z170评测】BIOS设置及超频方法简介_华擎 Z170 超频方程式_主板评测-中关村在线...
  6. 【每日一句】名人金句学英语(1130)
  7. TexStudio编写Latex碰到的问题
  8. InvalidateRect和Invalidate的区别
  9. 一张图让你看遍10个VR细分领域!
  10. Codeforces Round #644 1360H. Binary Median(思维、构造)