MAC 安装caffe问题

2017年12月8日 由 Creater 没有评论 »

各种稀奇古怪的问题都碰到,今天按如下方法安装完成。
1.安装anaconda2,默认在根目录;
2.依赖包
[plain]for x in snappy leveldb gflags glog szip hdf5 lmdb homebrew/science/opencv;
do
brew uninstall $x;
brew install –fresh -vd $x;
done
brew uninstall –force protobuf; brew install –with-python –fresh -vd protobuf
brew uninstall boost boost-python; brew install –fresh -vd boost boost-python
[/plain]
3.因为我是用cmake安装很多问题,这次换用make来直接编译,直接修改Makefile.config,去掉CPU_ONLY的#号,修改python路径
4.
[plain]“cublas_v2.h: No such file or directory”[/plain]如果是无GPU,则检查CPU_ONLY的开关值。
5.[plain]Undefined symbols for architecture x86_64: for caffe build
cv::imread(cv::String const&, int)”, referenced from:
caffe::WindowDataLayer::InternalThreadEntry() in window_data_layer.o
caffe::WindowDataLayer::InternalThreadEntry() in window_data_layer.o
caffe::ReadImageToCVMat(std::string const&, int, int, bool) in io.o
“cv::imdecode(cv::_InputArray const&, int)”, referenced from:
caffe::DecodeDatumToCVMat(caffe::Datum const&, int, int, bool) in io.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)[/plain]
出现上述信息的原因是cv::imread是在opencv_imgcodecs中定义的,然而这篇博客中并没有加-lopencv_imgcodecs,将它在Linker Flags也加上即可,在Makefile里搜索pthread 把这个选项紧跟在后面。
6.[plian]No module named google.protobuf.internal[/plain]装的是anaconda2, 解决方法是在其中安装protobuf最新版本
[plain]conda install protobuf[/plain]
7.

No module named pydot

安装下面的包

brew install python-pydot

8.

dot” not found in path

安装下面的包
[plain]brew install graphviz[/plain]

相关归档

Do I need to install pip?

2017年11月27日 由 Creater 没有评论 »

Installation

Do I need to install pip?

pip is already installed if you’re using Python 2 >=2.7.9 or Python 3 >=3.4 binaries downloaded from python.org, but you’ll need to upgrade pip.

Additionally, pip will already be installed if you’re working in a Virtual Environment created byvirtualenv or pyvenv.

Installing with get-pip.py

To install pip, securely download get-pip.py[2]

Then run the following:

python get-pip.py

Warning

Be cautious if you’re using a Python install that’s managed by your operating system or another package manager. get-pip.py does not coordinate with those tools, and may leave your system in an inconsistent state.

get-pip.py will also install setuptools [3] and wheel, if they’re not already. setuptools is required to install source distributions. Both are required to be able to build a Wheel Cache (which improves installation speed), although neither are required to install pre-built wheels.

Note

The get-pip.py script is supported on the same python version as pip. For the now unsupported Python 3.2, an alternate script is available here.

get-pip.py options

--no-setuptools
If set, don’t attempt to install setuptools

--no-wheel
If set, don’t attempt to install wheel

Additionally, get-pip.py supports using the pip install options and the general options. Below are some examples:

Install from local copies of pip and setuptools:

python get-pip.py --no-index --find-links=/local/copies

Install to the user site [4]:

python get-pip.py --user

Install behind a proxy:

python get-pip.py --proxy="[user:passwd@]proxy.server:port"

Upgrading pip

On Linux or macOS:

pip install -U pip

On Windows [5]:

python -m pip install -U pip

Python and OS Compatibility

pip works with CPython versions 2.6, 2.7, 3.3, 3.4, 3.5 and also pypy.

This means pip works on the latest patch version of each of these minor versions (i.e. 2.6.9 for 2.6, etc). Previous patch versions are supported on a best effort approach.

pip works on Unix/Linux, macOS, and Windows.


[1] For Python 2, see https://docs.python.org/2/installing, and for Python3, see https://docs.python.org/3/installing.
[2] “Secure” in this context means using a modern browser or a tool like curl that verifies SSL certificates when downloading from https URLs.
[3] Beginning with pip v1.5.1, get-pip.py stopped requiring setuptools to be installed first.
[4] The pip developers are considering making --user the default for all installs, including get-pip.pyinstalls of pip, but at this time, --user installs for pip itself, should not be considered to be fully tested or endorsed. For discussion, see Issue 1668.

矩阵的迹 特征值

2017年11月25日 由 Creater 没有评论 »

矩阵的迹(trace)

X∈P(n×n,X=(xii)的主对角线上的所有元素之和称之为X的迹,记为tr(X),即tr(X)=∑xii

性质:

(1)

设有N阶矩阵A,那么矩阵A的迹(用tr(A)表示)就等于A的特征值的总和,也即A矩阵的主对角线元素的总和。

1.迹是所有对角元的和

2.迹是所有特征值的和

3.某些时候也利用tr(AB)=tr(BA)来求迹

(2)

奇异值分解(Singular value decomposition )

奇异值分解非常有用,对于矩阵A(p*q),存在U(p*p),V(q*q),B(p*q)(由对角阵与增广行或列组成),满足A = U*B*V

U和V中分别是A的奇异向量,而B是A的奇异值。AA’的特征向量组成U,特征值组成B’B,A’A的特征向量组成V,特征值(与AA’相同)组成BB’。因此,奇异值分解和特征值问题紧密联系。

如果A是复矩阵,B中的奇异值仍然是实数。

SVD提供了一些关于A的信息,例如非零奇异值的数目(B的阶数)和A的阶数相同,一旦阶数确定,那么U的前k列构成了A的列向量空间的正交基。

 

 

矩阵的特征值(eigenvalue)

设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是A的一个特征值(characteristic value)或本征值(eigenvalue)。

求解矩阵特征值的方法:

Ax=mx,等价于求m,使得(mE-A)x=0,其中E是单位矩阵,0为零矩阵。

|mE-A|=0,求得的m值即为A的特征值。|mE-A| 是一个n次多项式,它的全部根就是n阶方阵A的全部特征值,这些根有可能相重复,也有可能是复数。

如果n阶矩阵A的全部特征值为m1 m2 … mn,则|A|=m1*m2*…*mn

同时矩阵A的迹是特征值之和:tr(A)=m1+m2+m3+…+mn[1]

如果n阶矩阵A满足矩阵多项式方程g(A)=0, 则矩阵A的特征值m一定满足条件g(m)=0;特征值m可以通过解方程g(m)=0求得

MacTeX下载镜像

2017年10月27日 由 Creater 没有评论 »

http://mirrors.ustc.edu.cn/CTAN/systems/mac/mactex/

DataGridView绑定Ilist对象,出现IndexOutOfRangeException错误的解决方法

2017年10月24日 由 Creater 没有评论 »

我是这样绑定DataGridVeiw的:

IList<Resource> resources = new List<Resource>();
Resource  resource = new Resource();
resources.Add(resource);
dataGridView.DataSource = resources;

在第一个模块中能正常使用,没有任何问题。但到了第二个模块,同样的语句,只要一点击DataGridView控件,马上就会跳出System.IndexOutOfRangeException异常,具体内容如下:

未处理 System.IndexOutOfRangeException
  Message="索引 -1 没有值。"
  Source="System.Windows.Forms"
  StackTrace:
       在 System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
       在 System.Windows.Forms.CurrencyManager.get_Current()
       在 System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e)
       在 System.Windows.Forms.DataGridView.OnRowEnter(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred)
       在 System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
       在 System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
       在 System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
       在 System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
       在 System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
       在 System.Windows.Forms.Control.WndProc(Message& m)
       在 System.Windows.Forms.DataGridView.WndProc(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       在 System.Windows.Forms.Application.Run(Form mainForm)
       在 KoalaStudio.ksRBAC.PrivilegeConfigTool.Program.Main()
       在 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       在 System.Threading.ThreadHelper.ThreadStart()

而且比较可恶的是,抛出异常的地方竟然是在Program.cs里,指向

Application.Run(new FrmMain());

这让人怎么调试,试了N回,也没发现原因。
于是上网找了找,竟然真有解决的方法,其作者也并未解决这个问题,而是采取了折衷的方法,用了一个过渡组件来解决:

BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = resources;
dgvResource.DataSource = bindingSource;

问题可以解决,但又有了新的问题,因为使用了BindingSource,因此对与DataGridView的更改并不能同步到Ilist对象上,所以还是不能用这种方法,继续研究。

上国外的网站看了看,终于找到了问题的原因,在向DataGridView绑定Ilist类型的对象是,如果对象的成员为0,那么就会出现
此问题。而且即使重新绑定DataGridView的数据源,也会继续存在此问题,解决的方法就是在向DataGridView绑定Ilist对象是,要保证其中至少有一个成员,否则宁可不绑定(虽然不是最完美的解决方法)。
其实最好的方法,是用BindingList对象代替Ilist对象作为DataGridView的数据源,即可彻底解决此问题,而且能实现DataGridView修改时与数据源的自动更新。但现在没有时间,只能先这样用了。

机器学习: Canonical Correlation Analysis 典型相关分析

2017年10月16日 由 Creater 没有评论 »

Canonical Correlation Analysis(CCA)典型相关分析也是一种常用的降维算法。我们知道,PCA(Principal Component Analysis) 主分量分析将数据从高维映射到低维空间同时,保证了数据的分散性尽可能地大, 也就是数据的方差或者协方差尽可能大。而LDA(Linear Discriminant Analysis) 线性判别分析则利用了类标签,利用一种监督学习的方法,将数据从高维空间映射到低维空间时,让不同类的数据尽可能地分开而同一类的数据尽可能地聚合。

但是,有的时候,想知道多个线性空间之间的相关性。比如有的时候我们会从图像中提取各种特征,每一种特征都可以构成一个线性空间,为了分析这些空间之间的相关性,我们可以利用CCA 来做分析。
假设我们有两个特征空间,\(S1={\mathbf{x}_{1} \in R^{d1}}\)\(S2={\mathbf{x}_{2} \in R^{d2}}\)

\(\mathbf{x} = \begin{pmatrix}
\mathbf{x}_{1} \\
\mathbf{x}_{2}
\end{pmatrix}
\quad E(\mathbf{x}) = \begin{pmatrix}
\mathbf{\mu}_{1} \\
\mathbf{\mu}_{2}
\end{pmatrix}
\quad \Sigma = \begin{pmatrix}
\Sigma_{11} & \Sigma_{12} \\
\Sigma_{21} & \Sigma_{22}
\end{pmatrix}\)

可以看到,\(\Sigma_{12}=\Sigma_{21}^{T}\),\(\Sigma\) 称为协方差矩阵。我们引入投影向量 \(\mathbf{a}\), \(\mathbf{b}\), 假设投影之后的变量满足:

\(u=\mathbf{a}^{T} \mathbf{x}_{1} \quad v=\mathbf{b}^{T} \mathbf{x}_{2}\)

可以进一步算出 \(u,v\)的方差和协方差:

\(\text{var}(u)= \mathbf{a}^{T} \Sigma_{11} \mathbf{a}, \quad \text{var}(v)=\mathbf{b}^{T} \Sigma_{21} \mathbf{b}, \quad cov(u,v)=\mathbf{a}^{T} \Sigma_{12} \mathbf{b}\)

可以计算出 \(u,v\)的相关系数:

\(Corr(u,v)=\frac{\text{cov}(u,v)}{\sqrt{\text{var}(u)} \sqrt{\text{var}(v)}}\)

将u,v的表达式代入,可以得到:

\(Corr(u,v)=\frac{\mathbf{a}^{T} \Sigma_{12} \mathbf{b}}{\sqrt{\mathbf{a}^{T} \Sigma_{11} \mathbf{a}} \sqrt{\mathbf{b}^{T} \Sigma_{22} \mathbf{b}}}\)

我们的目标是让相关系数\(Corr(u,v)\)尽可能地大。为了求解\(\mathbf{a}\), \(\mathbf{b}\), 可以固定分母而让分子最大化,所以上面的函数可以变成:

\(\max_{\mathbf{a}, \mathbf{b}} \mathbf{a}^{T} \Sigma_{12} \mathbf{b}\)

构造拉格朗日等式:

\(L=\mathbf{a}^{T} \Sigma_{12} \mathbf{b}-\frac{\lambda_{1}}{2}(\mathbf{a}^{T} \Sigma_{11} \mathbf{a}-1)-\frac{\lambda_{2}}{2}(\mathbf{b}^{T} \Sigma_{22} \mathbf{b}-1)\)

L 分别对\(\mathbf{a}\), \(\mathbf{b}\)求导,可以得到:

\(\frac{\partial L}{\partial \mathbf{a}}= \Sigma_{12} \mathbf{b}- \lambda_{1} \Sigma_{11} \mathbf{a}=0\)

\(\frac{\partial L}{\partial \mathbf{b}}= \Sigma_{21} \mathbf{a}- \lambda_{2} \Sigma_{22} \mathbf{b}=0\)

根据约束条件,可以得到:

\(\lambda_{1}=\lambda_{2}=\mathbf{a}^{T} \Sigma_{12} \mathbf{b}\)

所以只要求出\(\lambda_{1}\) 或者\(\lambda_{2}\)就可以得到最大的相关系数。令\( \lambda=\lambda_{1}=\lambda_{2}\).
通过上面的偏导数,我们可以得到:

\(\Sigma_{11}^{-1}\Sigma_{12} \mathbf{b}= \lambda \mathbf{a}\)

\(\Sigma_{22}^{-1}\Sigma_{21} \mathbf{a}= \lambda \mathbf{b}\)

写成矩阵形式:

\(\begin{pmatrix}
\Sigma_{11}^{-1} & 0 \\
0 & \Sigma_{22}^{-1}
\end{pmatrix} \begin{pmatrix}
0 & \Sigma_{12} \\
\Sigma_{21} & 0
\end{pmatrix} \begin{pmatrix}
\mathbf{a} \\
\mathbf{b}
\end{pmatrix}=\lambda \begin{pmatrix}
\mathbf{a} \\
\mathbf{b}
\end{pmatrix}\)

令:

\(B= \begin{pmatrix}
\Sigma_{11} & 0 \\
0 & \Sigma_{22} \end{pmatrix}, \quad A= \begin{pmatrix}
0 & \Sigma_{12} \\
\Sigma_{21} & 0
\end{pmatrix} \quad \mathbf{w}=\begin{pmatrix}
\mathbf{a} \\
\mathbf{b}
\end{pmatrix}\)

那么,上式可以表示成:

\(B^{-1}A\mathbf{w}=\lambda \mathbf{w}\)

所以,\(\lambda \)和 \(\mathbf{w}\) 就是\(B^{-1}A\) 的特征值和特征向量。我们可以求出 \(B^{-1}A\)的特征值和特征向量,然后利用特征向量将原来的特征
\(\mathbf{x}_{1}, \mathbf{x}_{2}\)做映射。对应特征值 \(\lambda \)的求解,可以有更简单的方法,从上面的偏导数,我们可以得到如下等式:

\(\Sigma_{11}^{-1}\Sigma_{12}\Sigma_{22}^{-1}\Sigma_{21} \mathbf{a}=\lambda^{2} \mathbf{a}\)

我们可以利用上面的表达式求出\(\lambda \) 和 \(\mathbf{a}\),然后再待会上面的偏导数等式求出 \(\mathbf{b}\).
\(\lambda \)就是 \(u,v\)的相关系数,\(u,v\) 就是一对典型变量(canonical variables)。按照 \(B^{-1}A\) 的特征值从大到小排列,可以求出一系列的典型变量。特征值越大,说明典型变量的相关性越强。
Reference:
http://blog.csdn.net/wenyusuran/article/details/35290683

PCA and Whitening

2017年10月14日 由 Creater 没有评论 »

文献:http://ufldl.stanford.edu/wiki/index.php/Exercise:PCA_and_Whitening

(一):数据准备

UFLDL下载的文件中,包含数据集IMAGES_RAW,它是一个512*512*10的矩阵,也就是10幅512*512的图像,可以看下其中的第二幅,使用extract_show函数。

function extract_show(IMAGESr, index)
%load IMAGES_RAW;
IMAGES_ = IMAGESr;
imshow(IMAGES_(:,:,index));

FE957034-C785-4284-B361-2B0100D32847

(1)载入数据

利用sampleIMAGESRAW函数,从IMAGES_RAW中提取numPatches个图像块,每个图像块大小为patchSize,并将提取到的图像块按列存放,分别存放在在矩阵patches的每一列中,即patches(:,i)存放的是第i个图像块儿的所有像素值。如下为产生的原始图像部分。
1

(2)数据去均值化处理

将每一个图像块儿的所有像素值都减去该图像块儿的平均像素值,实现数据的去均值化。
这里要注意一下第三行。理论上应该使用第二行做均值归0,但是图像每个像素点之间是很相关的。

[dim,sampleN] = size(x);%维数与样本数
%x = x - repmat(mean(x,2),1,sampleN);%标准PCA均值归0
x = x - repmat(mean(x,1),dim,1);

2

(二)PCA处理

该部分分为两部分:

(1)进行PCA计算

这里仅仅对数据x进行旋转得到xrot,而不进行主成分的提取,具体地:
①计算数据x的协方差矩阵sigma
②对sigma进行特征分解,利用matlab的eig函数,从而得到sigma的特征向量构成的矩阵U

[U,S,V]=eig(sigma);

U=[u1,…,ui,…,un],它的每一列分别是sigma的特征向量,n是输入数据的特征维数,S=diag([λ1,…λi,…,λn])是由sigma的特征值作为对角元素的对角阵,ui和λi相对应,为了后续的计算,这里要将U的各列次序进行调换,使得调换后的各列所对应的特征值大小依次递减,调换后的矩阵仍记作U,相应的特征值对角阵仍即为S,即:

U=[u1,...,ui,...,un],S=diag([λ1,...λi,...,λn])

满足:

λ1&gt;=...&gt;=λi&gt;=...&gt;=λn

③利用矩阵U对数据x进行旋转,得到xrot,即

xrot=U‘*x

完整代码如下:

xRot = zeros(size(x)); % You need to compute this 144 * 10000
S = x*x'/sampleN; %协方差矩阵
[U,D] = eig(S); %特征向量与特征值
U = fliplr(U);%U为列特征向量,D为特征值对角阵
D = fliplr(fliplr(D)'); %按照特征值由大到小排列
xRot = U'*x;

旋转变换后图为
3

(2)对旋转后的数据求解协方差矩阵covar

将协方差矩阵可视化,观察得到的选择后的数据是否正确。PCA保证选择后的数据的协方差矩阵是一个对角阵,如果covar是正确的,那么它的图像应该是一个蓝色背景,并且在对角线位置有一斜线。这里显示协方差矩阵covar利用了matlab的imagesc,imagesc(covar)的作用是:把矩阵covar以图像形式显示出来,矩阵中不同的数值会被赋予不同的颜色,得到的协方差矩阵的图像如下:可以看到,图像除了对角线位置外,其余部分颜色都相同。

covar = zeros(size(x, 1)); % You need to compute this
% Visualise the covariance matrix. You should see a line across the
% diagonal against a blue background.
covar = xRot*xRot';%获得变换后数据的协方差矩阵

4

(三)获取满足条件的主成分

本部分,找到满足条件的主成分的个数k,也就是找到最小的k值,使得(λ1+…+ λk)/(λ1+…+ λn)>某个百分数,如99%

k = 0; % Set k accordingly
var_total = sum(D(:))               %总方差
var_cur = 0;                        %方差计数
for k = 1:dim
    var_cur = var_cur + D(k,k);     %累计
    if (var_cur / var_total) &gt; 0.90 %如果能量已&gt;90%,则跳出for语句
        break;
    end
end

(四)利用找到的主成分个数,对数据进行降维

在第三步,已经找到了数字k,也就是,保留数据的k个主成分就满足了要求。在该步,将对数据x进行降维,只留下k个主成分。同时,为了观察降维后的数据的好坏,在利用U(:,k)将降维后的数据变换会原来的维数,也就是得到了原数据的近似恢复数据。并利用网格将恢复出的图像显示出,与原图像进行比较,下面第一幅图是由降维后的图像恢复出的原数据,下图是相应的原数据,可以发现,降维后的数据基本可以恢复出于原数据非常相近的数据。

xHat = zeros(size(x));  % You need to compute this
U_reduce = zeros(dim);          %初始化
U_reduce(:, 1:k) = U(:, 1:k);   %去掉特征值小的特征向量(降维)
y = U_reduce'*x;                %变换
xHat = U_reduce*y;              %反变换回来

% Visualise the data, and compare it to the raw data
% You should observe that the raw and processed data are of comparable quality.
% For comparison, you may wish to generate a PCA reduced image which
% retains only 90% of the variance.

figure('name',['#5 PCA processed images ',sprintf('(%d / %d dimensions)', k, size(x, 1)),'']);
display_network(xHat(:,randsel));
figure('name','Raw images');
display_network(x(:,randsel));

5
1
假如保存前90%的能量,PCA可以用44个特征代表144个特征。

(五)PCA白化+正则化

该部分分为两步

(1)执行具有白化和正则化的PCA

首先,对数据进行旋转(利用特征矩阵U),然后,利用特征值对旋转后的数据进行缩放,实现白化。同时,在利用特征值缩放时,利用参数ε对特征值进行微调,实现正则化。

epsilon = 0.1;
xPCAWhite = zeros(size(x));

eig_value = diag(D);                            %特征值
normalize = sqrt(eig_value+epsilon);            %白化系数
xPCAWhite = U'*x ./ (normalize*ones(1,sampleN));%白化

271631124694609

(2)计算白化后的数据的协方差矩阵,观察该协方差矩阵

如果加入了正则化项,则该协方差矩阵的对角线元素都小于1,如果没有加入正则项(即仅有旋转+白化),则该协方差矩阵的对角线元素都为1(实际上,是令ε为一个极小的数),下图是白化后数据的协方差矩阵对应的图像,上图是加入正则化后的结果,下图是没有加入正则化后的结果。

covar = xPCAWhite*xPCAWhite' / sampleN; %协方差矩阵 
figure('name','Visualisation of covariance matrix');
imagesc(covar);

8

(六)ZCA白化

ZCA白化,就是在PCA白化的基础上做了一个旋转,即

xZCAWhite = zeros(size(x));
xZCAWhite = U * xPCAWhite;  %ZCA白化 

271923492655269
下面的第一幅图是ZCA白化后的结果图,第二幅图是相应的原始图像。可以看到,ZCA白化的结果图似乎是原始图像的边缘。
white
1

Stanford UFLDL教程 MATLAB Modules

2017年10月14日 由 Creater 没有评论 »

MATLAB Modules

Sparse autoencoder |sparseae_exercise.zip

  • checkNumericalGradient.m – Makes sure that computeNumericalGradient is implmented correctly
  • computeNumericalGradient.m – Computes numerical gradient of a function (to be filled in)
  • display_network.m – Visualizes images or filters for autoencoders as a grid
  • initializeParameters.m – Initializes parameters for sparse autoencoder randomly
  • sampleIMAGES.m – Samples 8×8 patches from an image matrix (to be filled in)
  • sparseAutoencoderCost.m -Calculates cost and gradient of cost function of sparse autoencoder
  • train.m – Framework for training and testing sparse autoencoder

Using the MNIST Dataset |mnistHelper.zip

  • loadMNISTImages.m – Returns a matrix containing raw MNIST images
  • loadMNISTLabels.m – Returns a matrix containing MNIST labels

PCA and Whitening |pca_exercise.zip

  • display_network.m – Visualizes images or filters for autoencoders as a grid
  • pca_gen.m – Framework for whitening exercise
  • sampleIMAGESRAW.m – Returns 8×8 raw unwhitened patches

Softmax Regression |softmax_exercise.zip

  • checkNumericalGradient.m – Makes sure that computeNumericalGradient is implmented correctly
  • display_network.m – Visualizes images or filters for autoencoders as a grid
  • loadMNISTImages.m – Returns a matrix containing raw MNIST images
  • loadMNISTLabels.m – Returns a matrix containing MNIST labels
  • softmaxCost.m – Computes cost and gradient of cost function of softmax
  • softmaxTrain.m – Trains a softmax model with the given parameters
  • train.m – Framework for this exercise

from: http://ufldl.stanford.edu/wiki/index.php/MATLAB_Modules