UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)

1:softmax回归

当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归。

教程中已经给了cost及gradient的求法。须要注意的是一般用最优化方法求解參数theta的时候,採用的是贝叶斯学派的思想,须要加上參数theta。

softmax回归 习题的任务就是用原有的像素数据集构建一个softmax回归模型进行分类。准确率略低 92.6%,。

而自我学习是用5~9之间的数据集当做无标签的数据集,然后构建一个稀疏自编码器,然后将0~4中一部分有标签的数据集通过稀疏自编码器提取特征,然后用此特征构建一个softmax回归模型,然后针对一部分有标签的数据集进行预測。

习题答案:

(1) 数据载入——————代码已给

(2) %% STEP 2: Implement softmaxCost  得到计算cost和gradient

M = theta*data;  % M的每一列就是一个样本所相应的thta*data(:, i)的值
M = bsxfun(@minus, M, max(M, [],1)); %减去每列的最大值以防止溢出
M = exp(M);   %
p = bsxfun(@rdivide, M, sum(M));  %得到概率矩阵

cost = -1/numCases .* sum(groundTruth(:)'*log(p(:))) + lambda/2 *sum(theta(:).^2);    % cost function
thetagrad = -1/numCases .* (groundTruth - p) * data' + lambda * theta;               % grad 

(3)gradient check ———代码已给

(4) Learning parameters ----代码已给出训练得到最佳的參数theta  通常採用L-BFGS进行迭代得到最佳參数。L-BFGS眼下被觉得是最有效的无约束优化问题。

(5)測试

[nop, pred] = max(theta * data); % nop存放的是每列的最大值。pred存放的是该最大值所在的行号

2:自我学习和无监督特征学习

过程是这样子的:原始数据一部分是有标签。一部分是没有标签的,我们使用无标签的数据去训练得到一个稀疏自编码器(AutoEncoder),然后我们将一部分有标签的数据输入该编码器,并将第二层hidden layer的激励值作为新的特征来取代(合并)原有的特征,用新的特征及其标签训练一个softmax回归模型。然后将剩余的有标签数据作为測试集(注意这里的測试输入softmax中的数据是稀疏编码器第二层的激励值)。

注意:这里没有对数据进行白化的预处理,有时间会做下。比对下效果。

习题答案——最后的准确率是98.189306%

(1) %  Find opttheta by running thesparse autoencoder on

% unlabeled Training Images

options.Method = 'lbfgs'; % Here, we use L-BFGS to optimize our cost
                          % function. Generally, for minFunc to work, you
                          % need a function pointer with two outputs: the
                          % function value and the gradient. In our problem,
                          % sparseAutoencoderCost.m satisfies this.
options.maxIter = 400;	  % Maximum number of iterations of L-BFGS to run
options.display = 'on';

[opttheta, cost] = minFunc( @(p) sparseAutoencoderCost(p, ...                   %通过L-BFGS得到最佳的cost与gradient
                                   inputSize, hiddenSize, ...
                                   lambda, sparsityParam, ...
                                   beta, unlabeledData), ...
                              theta, options);

(2) Extract Features from the Supervised Dataset

b1 = repmat(b1, 1, size(data, 2));
Z1 = W1*data + b1;
activation = sigmoid(Z1);

(3) %% STEP 4: Train the softmax classifier

lambda = 1e-4;                                                   %% lambda设置的过大 效果没有达到98%
numClasses = numLabels;
softmaxModel = softmaxTrain(hiddenSize, numClasses, lambda, ...                    %% 注意这里不再是trainData,而是在稀疏自编码算法中提取的第二层结点的激励值作为新的特征值
                            trainFeatures, trainLabels, options);

(4)測试

[pred] = softmaxPredict(softmaxModel, testFeatures);   %%% 对结果进行预測
时间: 2024-11-01 00:01:28

UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)的相关文章

UFLDL教程笔记及练习答案三(Softmax回归与自我学习)

1:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归.教程中已经给了cost及gradient的求法.需要注意的是一般用最优化方法求解参数theta的时候,采用的是贝叶斯学派的思想,需要加上参数theta. 习题答案: (1) 数据加载------代码已给 (2) %% STEP 2: Implement softmaxCost   得到计算cost和gradient M = theta

UFLDL教程笔记及练习答案二(预处理:主成分分析和白化)

首先将本节主要内容记录下来,然后给出课后习题的答案. 笔记: 1:首先我想推导用SVD求解PCA的合理性. PCA原理:假设样本数据X∈Rm×n,其中m是样本数量,n是样本的维数.PCA降维的目的就是为了使将数据样本由原来的n维降低到k维(k<n).方法是找数据随之变化的主轴,在Andrew Ng的网易公开课上我们知道主方向就是X的协方差所对应的最大特征值所对应的特征向量的方向(前提是这里X在维度上已经进行了均值归一化).在matlab中我们通常可以用princomp函数来求解,详细见:http

UFLDL教程笔记及练习答案六(稀疏编码与稀疏编码自编码表达)

稀疏编码(SparseCoding) sparse coding也是deep learning中一个重要的分支,同样能够提取出数据集很好的特征(稀疏的).选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线. 稀疏编码算法的目的就是找到一组基向量使得我们能将输入向量x表示成这些基向量的线性组合: 这里构成的基向量要求是超完备的,即要求k大于n,这样的方程就大多情况会有无穷多个解,此时我们给

UFLDL教程笔记及练习答案四(建立分类用深度学习)

此次主要由自我学习过度到深度学习,简单记录如下: (1)深度学习比浅层网络学习对特征具有更优异的表达能力和紧密简洁的表达了比浅层网络大的多的函数集合. (2)将传统的浅层神经网络进行扩展会存在数据获取.局部最值和梯度弥散的缺点. (3)栈式自编码神经网络是由多层稀疏自编码器构成的神经网络(最后一层采用的softmax回归或者logistic回归分类),采用逐层贪婪的训练方法得到初始的参数,这样在数据获取方面就可以充分利用无标签的数据.通过逐层贪婪的训练方法又称为预训练,然后可以使用有标签的数据集

UFLDL教程笔记及练习答案五(自编码线性解码器与处理大型图像)

自动编码线性解码器 自动编码线性解码器主要是考虑到稀疏自动编码器最后一层输出如果用sigmoid函数,由于稀疏自动编码器学习是的输出等于输入,simoid函数的值域在[0,1]之间,这就要求输入也必须在[0,1]之间,这是对输入特征的隐藏限制,为了解除这一限制,我们可以使最后一层用线性函数及a = z 习题答案: SparseAutoEncoderLinerCost.m function [cost,grad,features] = sparseAutoencoderLinearCost(the

神级网络 - UFLDL教程笔记

激活函数: 1)sigmoid函数 - 值域(0,1)    2)tanh函数 - 值域(-1,1)   两个函数都扩展至向量表示:      - 网络层数  - 第l层的节点数(不包括偏置单元)  - 第l层第j单元 与 第l+1层第i单元之间的连接参数,大小为  - 第l+1层第i单元的偏置项  - 第l层的激活值  - 第l层第i单元输入加权和(包括偏置单元)  - 样本 m - 样本数 α - 学习率 λ - 权重衰减参数,控制方差代价函数两项的相对重要性. hw,b(x)=a 前向传播

UFLDL 教程答案 稀疏编码与softmax篇的答案已经传到资源,大家可以免费下载~

UFLDL 教程答案 稀疏编码篇与softmax篇的答案已经传到资源,大家可以免费下载~ 另外,关于资源里面描述的低效率的代码的问题,逗比的博主已经找到了解决方案,大家需要修改两个文件的两处代码,绿色是需要被注释的 softmaxCost.m文件 %% 非向量化 %for i = 1 : numCases %    thetagrad = thetagrad + (groundTruth(:,i) - Hx(:,i)) * data(:,i)'; % 10 * 100, 8 * 100 %end

ufldl学习笔记与编程作业:Softmax Regression(vectorization加速)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节是对ufldl学习笔记与编程作业:Softmax Regression(softmax回归)版本的改进. 哈哈,把向量化的写法给写出来了,尼玛好快啊.只需要2分钟,2

ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其它机器学习的算法,能够直接来学dl. 于是近期就開始搞这个了.教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutoria