Matconvnet笔记

详解Matconvnet中的卷积神经网络的细节,每一层的具体计算过程

卷积层 vl__nnconv

作用的是进行卷积操作,具体的用法为y=vl_nnconv(x,f,b).该函数通常进行4维矩阵,也就是张量运算,最大接受的矩阵唯独为4,但也可以进行低维度矩阵运算. 最大4

即\( x \in \mathbb{R}^{H \times W \times D}, \)

效果图

这次使用PCA对MNIST数据集中数字0和1进行降维分类,分别使用Matlab和Python来实验,结果如下:

将数字图片降低到两个维度,红点为数字0的图像降维结果,蓝点为数字1的降维结果

特征值与特征向量定义

特征向量的定义为:\[A \vec{v} = \lambda \vec{v} \] 其中\(\vec{v}\)就是\(A\)就是特征向量,而对应的\(\lambda\)就是特征值

在Matlab里使用eig函数来求,使用方法为:

1
2
3
4
5
6
7
8
9
10
clear all
close all
clc

mat = rand(3,3);
[V D] = eig(mat); % V 为特征向量,列向量,D为特征值

mat*V(:, 1) - D(1, 1)*V(:, 1)
mat*V(:, 2) - D(2, 2)*V(:, 2)
mat*V(:, 3) - D(3, 3)*V(:, 3)
注意,一个矩阵可能会有多个特征向量,而且通常情况下特征向量相互独立也就是线性无关(为什么无关可以用反证法),就是不同特征向量的乘积为0。 如果把矩阵理解为多维空间的运动,特征向量就是坐标轴了, 那么2维矩阵会有两个,3维矩阵会有三个,特征向量所在直线 就被称为特征空间。例如二维矩阵就会有两个,关键在于\(\vec{v}\)是把矩阵向左转了 还是向右转了,如下图

特征向量和特征空间

特征向量定义与特征分解公式

再回到之前的特征向量定义: \[A \vec{V} = \lambda \vec{v} \] 然后是矩阵特征值分解的公式: \[A = P \Lambda P^{-1} \] 其中的\(\Lambda\)就是矩阵A的特征值,而\(P^{-1}\)的列向量就是矩阵的特征向量。

特征向量的定义如何推导出特征值分解公式。 假设\(A\)为对角矩阵,那么他肯定是一个可对角化矩阵。 那么他的特征向量两两正交。现在假设它有\(m\)个不同的特征值为\(\lambda_i \),对应的 特征向量为\(x_i\)则有: \[ Ax_1 = \lambda_1 x_1 \\ Ax_2 = \lambda_2 x_2 \\ \cdots \\ Ax_m = \lambda_m x_m \] 进而得到: \[AU = U\Lambda \] 其中 \[ U = [x_1 x_2 \cdots x_m] \quad \quad \Lambda = \begin{pmatrix} \lambda_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \lambda_m \\ \end{pmatrix} \] 最后也就是推出了: \[ A = U\Lambda U^{-1} = U\Lambda U^{T} \] 其中,由于特征向量两两正交,所以\(U\)为正交阵, 正交矩阵的逆等于转置。Matlab的验证程序如下: