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的知识介绍得不够详细,我会抓时间把代码整理注释一下,然后与大家分享。

0 0
原创粉丝点击