PCANet中PCA算法为什么没有起到降维的作用?
来源:互联网 发布:网店交易 知乎 编辑:程序博客网 时间:2024/06/04 20:14
最近在研究深度学习中的PCANet,这是由国内深度学习方面的一些技术大牛提出的一个简洁的深度学习框架,然后在调试运行源代码的时候发现一个有趣问题,就是其中的PCA算法并没有对图片矩阵起到降维的作用。
举个例子,假设我们已经训练好了PCANet的滤波器矩阵,我们的输入图像设置为64*64,经过PCANet的映射之后(核心就是主成分映射),输出的矩阵仍为64*64,如图:
其中PCA_Output函数就是PCA映射操作,但为什么这里的PCA没有降维的作用呢?研究PCA_Output函数的内部就会发现,其PCA映射过程是一个“先升维再降维”的过程。首先,通过im2col_mean_removal()函数对图像矩阵进行升维操作:
可见在im2col_mean_removal()处理之前,图像的尺寸为70*70(对原图像进行边缘补零的结果,以保证映射之后图片尺寸相同),经过升维后变成了49*4096,明显维数提高了不少,至于im2col_mean_removal()函数的作用,和im2colstep()函数作用基本一样,只是多了一个去均值的操作。完成升维之后,接下来就开始通过主成分映射对目标进行降维操作了:
注意这里变量V代表已经训练好的滤波器核,尺寸为49*8,则V(:,j)尺寸为49*1,与升维后的im(49*4096)进行转置向乘后得到的映射结果应为1*4096,再经过reshape函数正好能够再转换为64*64的矩阵,这就是PCA滤波器的一个输出。
至此,问题就变得明朗了,PCANet中PCA同样进行了降维,只不过是先通过块向量化的方式对图像进行了升维,然后再用PCA映射进行降维,两者相互抵消,从而造成了一种“不升不降”的假象。不过这里对PCANet的知识介绍得不够详细,我会抓时间把代码整理注释一下,然后与大家分享。
- PCANet中PCA算法为什么没有起到降维的作用?
- PCANet中PCA算法为什么没有起到降维的作用?
- java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!
- 关闭 java中预处理PrepareStatement为什么能起到防止SQL注入的作用
- java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!
- 接口起到的作用
- 接口起到的作用
- java工程中 不同的xml起到不同的作用
- 沟通在项目开发过程中起到的作用:举足轻重
- stdafx.h在C++中起到的作用是什么?
- Cassandra Commitlog在恢复中起到的作用
- stdafx.h在C++中起到的作用
- spring在SSH框架中起到的作用
- 粉碎在选矿过程中起到的作用
- Intent在Activity中起到了重要的桥梁作用
- 图侦在公安破案中起到什么样的作用
- 三极管发射极负反馈电阻的原理是什么?为什么就能起到负反馈作用呢
- 漫谈Deep PCA与PCANet
- 13个小技巧帮你征服Xcode
- 用实例给新手讲解RSA加密算法
- 如何为iOS应用及游戏添加后…
- vi常用快捷键备忘录
- iOS 创建单例的两种方法
- PCANet中PCA算法为什么没有起到降维的作用?
- iOS 创建单例的两种方法
- iOS开发中Settings.bundle的使用
- mina二进制数据处理粘包断包
- iOS开发:使用Settings Bundl…
- iOS控件常用类的常用属性和方法总…
- 在iOS 8中使用UIAlertController
- iOS8 播放系统声音、提醒声音…
- IOS --- OC与Swift混编