PS:这些是今年4月份,跟斯坦福UFLDL教程时的实验报告,当时就应该好好整理的…留到现在好凌乱了

Softmax Regression实验报告

1.Softmax Regression实验描述

Softmax回归模型是逻辑回归模型的推广,它可以把数据分类到两个以上的类别。在本实验中,我们的目标是采用Softmax回归模型对MNIST手写数字数据库进行分类,识别每个手写数字,把它们归类于0到9之间的10个类别。实验中需要计算成本函数J,参数Theta,成本函数的梯度,及预测假设h。

Figure1:some examples from the dataset

2.实现流程

Step 0:初始化常数和参量

Step 1 :加载数据

Step 2 :计算成本函数和梯度

Step 3 :梯度检查(若检查结果差距过大,返回step2)

Step 4 :学习参数

Step 5 : 测试

3.每步关键点及代码、注释

Step 0:初始化常数和参量

在MNIST数据库中,每个图像都由28x28像素的方块构成。实验的分类数量为10,分别对应0-9十个数字。

Step 1 :加载数据

练习中已经提供了两个读取数据的函数,loadMNISTImages,loadMNISTLabels。实际实验中要根据数据存放的路径,和文件名修改对应代码。

Step 2 :计算成本函数和梯度

这是这次实验中最关键也是最难的地方。要解决这个问题,需要熟练Matlab矢量化表示,详细分析每个矩阵的维度大小,每行每列都分别什么。

数据X是一个n x m矩阵,n = inputSize 为输入向量的维度,在本实验中为每个图像的像素数28x28=784,m = numCases 为训练样本的总数,在本实验中为60,000。

假设函数h的表达式如下,在这里h是一个k x m 的矩阵。k = numClasses 为类别数,在这里是10 :

实际运行中,这项有可能过大,导致内存溢出。处理方法是对假设函数矩阵h中的每列的指数项都减去一个常数,在这里选取每列的等于每列中最大的一项,具体实现代码如下所示。

M = bsxfun(@minus,theta*data,max(theta*data, [], 1));

M = exp(M);

p = bsxfun(@rdivide, M, sum(M));

参数Theta的结构如下,它是一个k x n的矩阵。

y是对每个手写数字图像正确分类的标签集合,是一个k x m的矩阵。

成本函数J的表达式如下:

成本函数梯度的表达式如下:

下面是matlab实现上述表达式的Matlab源码。

softmaxCost.m

%% ---------- YOUR CODE HERE --------------------------------------

% Instructions: Compute the cost and gradient for softmax regression.

% You need to compute thetagrad and cost.

% The groundTruth matrix might come in handy.

M = bsxfun(@minus,theta*data,max(theta*data, [], 1));

M = exp(M);

p = bsxfun(@rdivide, M, sum(M));

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

thetagrad = -1/numCases * (groundTruth - p) * data' + lambda * theta;

Step 3 :梯度检查

在实际训练样本数据之前,应该总是进行梯度检查。以确保实际得到的梯度与数值计算得到的梯度尽可能接近,在本实验中要小于10 e-9。如果这个差值过大,则应该重新检查算法的实现代码。

本实验中用到了checkNumericalGradient.m函数,需要从之前的实验中获得。

在这里最后梯度检查的差值为7.4657e-10,具体运行过程已附在文后。

Step 4 :学习参数

在本实验中优化函数常用minFunc_2009,是有Mark Schmidt 编写的一个Matlab优化工具箱,采用Limited-memory BFGS等算法实现最优化。

由于Matlab版本问题,起初使用2012版出现错误,后改用2009版minfunc才能正常运行。

优化代码如下所示:

% Use minFunc to minimize the function

addpath minFunc/

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,

% softmaxCost.m satisfies this.

minFuncOptions.display = 'on';

[softmaxOptTheta, cost] = minFunc( @(p) softmaxCost(p, ...

numClasses, inputSize, lambda, ...

inputData, labels), ...

theta, options);

Step 5 : 测试

测试时需要先把 softmaxExercise.m 中 DEBUG 设为 false ,跳过调试部分直接运行测试代码。

假设函数矩阵中h的每一列为给出的针对不同数字的概率,预测时找出每一列中概率最大的元素,令其为1,列中其余元素为0。具体实现代码如下。

softmaxPredict.m

%% ---------- YOUR CODE HERE --------------------------------------

% Instructions: Compute pred using theta assuming that the labels start from 1.

% theta : numClasses(k) x inputSize(N)

% pred : size(label) -> m x 1

M = bsxfun(@minus,theta*data,max(theta*data, [], 1));

M = exp(M);

h = bsxfun(@rdivide, M, sum(M));

[Y,pred] = max(h, [], 1);

4.实验结果及运行环境

实验结果

对最后10,000个测试集合,预测的精确度为:92.640%

耗时:91.919秒

运行环境

处理器: AMD A6-3420M APU with Radeon(tm) HD Graphics 1.50 GHz

RAM:4.00GB(2.24GB可用)

OS:Windows 7,32 bit

Matlab:R2012b(8.0.0.783)

minFunc:minFunc_2009

5.附录:实际运行结果

>> softmaxExercise

Iteration FunEvals Step Length Function Val Opt Cond

1 3 1.92327e-01 2.10164e+00 4.70649e+01

2 4 1.00000e+00 7.85859e-01 2.66517e+01

3 6 2.46921e-01 6.62726e-01 1.44533e+01

4 7 1.00000e+00 6.09112e-01 8.55839e+00

5 8 1.00000e+00 5.38142e-01 6.62115e+00

6 9 1.00000e+00 5.17398e-01 1.71550e+01

7 10 1.00000e+00 4.64872e-01 6.08330e+00

8 11 1.00000e+00 4.51595e-01 3.75876e+00

………..

95 101 1.00000e+00 2.67229e-01 8.72547e-03

96 102 1.00000e+00 2.67227e-01 8.84766e-03

97 103 1.00000e+00 2.67226e-01 1.00373e-02

98 104 1.00000e+00 2.67225e-01 1.68570e-02

99 105 1.00000e+00 2.67224e-01 7.52862e-03

100 106 1.00000e+00 2.67223e-01 5.98523e-03

Exceeded Maximum Number of Iterations

Accuracy: 92.640%

Elapsed time is 91.878679 seconds.

>> memory

Maximum possible array: 1021 MB (1.071e+09 bytes) *

Memory available for all arrays: 1809 MB (1.897e+09 bytes) **

Memory used by MATLAB: 521 MB (5.467e+08 bytes)

Physical Memory (RAM): 2297 MB (2.408e+09 bytes)

* Limited by contiguous virtual address space available.

** Limited by virtual address space available.

>>

UFLDL实验报告1: Softmax Regression的更多相关文章

  1. UFLDL实验报告3:Self-taught

    Self-taught 自我学习器实验报告 1.Self-taught 自我学习实验描述 自我学习是无监督特征学习算法,自我学习意味着算法能够从未标注数据中学习,从而使机器学习算法能够获得更大数量的数 ...

  2. UFLDL实验报告2:Sparse Autoencoder

    Sparse Autoencoder稀疏自编码器实验报告 1.Sparse Autoencoder稀疏自编码器实验描述 自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值, ...

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

    ufldl学习笔记与编程作业:Softmax Regression(vectorization加速) ufldl出了新教程,感觉比之前的好.从基础讲起.系统清晰,又有编程实践. 在deep learn ...

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

    ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...

  5. 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 5:Softmax Regression

    Softmax Regression Tutorial地址:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/ 从本节開始 ...

  6. R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)

    本文转载自经管之家论坛, R语言中的Softmax Regression建模 (MNIST 手写体识别和文档多分类应用) R中的softmaxreg包,发自2016-09-09,链接:https:// ...

  7. 北京电子科技学院(BESTI)实验报告5

    北京电子科技学院(BESTI)实验报告5 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名) 郑凯杰.周恩德 学号:(按贡献大小排名) 20145314.20145217 ...

  8. 北京电子科技学院(BESTI)实验报告4

    北京电子科技学院(BESTI)实验报告4 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)周恩德 .郑凯杰 学号:(按贡献大小排名)20145217 .201453 指 ...

  9. 20145215&20145307信息安全系统设计基础实验报告

    20145215&20145307信息安全系统设计基础实验报告 PART1 一.实验原理 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码.同一个体系结构可以运行不同的操作系统 ...

随机推荐

  1. MySQL (DCL)

    DCL语句 :数据库系统管理员使用,也就是数据库管理员 root 可以添加用户.删除用户.授予和限制用户权限,这些用户的信息可以在数据库的mysql数据库中查询到 1.查看用户信息     1.用ro ...

  2. Ubuntu 命令行下快速打开各类文件 分类: ubuntu shell 2014-11-18 20:06 210人阅读 评论(0) 收藏

    xdg-open 命令可以用来在Ubuntu下快速打开各类文件. 下面是从 manual 文档里截取的内容: 可以知道,该命令的功能是在图形界面下按照用户的平时习惯打开各类文件,甚至是链接. 这样,我 ...

  3. android中选择控件与选择界面自然过度效果的实现--一种新的交互设计

    转载请标明出处: http://blog.csdn.net/jianghejie123/article/details/40648931 在安卓中经常遇到须要选择一个东西的功能,比方选择日期.选择文件 ...

  4. [转] 考验你的JavaScript底细

    http://sentsin.com/ 尽管今日的JavaScript已经突飞猛进,但JS的许多特性仍然保留,以下题目并不是有意设坑,许多地方将验证你的JS底细,如果错了一半,请别告诉我你从事前端. ...

  5. 10.29 afternoon

    [问题描述] 祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色.此后,你可以发射珠子到轨道上并加入原有序列中.一旦有三个或更多同色的珠子 ...

  6. 16、SQL Server 复制及常见错误处理

    SQL Server 复制 复制是一组技术的组合,可以用此组合对数据和数据库对象进行复制由一个数据库移动到另一个数据库. 复制的英文是Replication,重复的意思,而不是Copy.复制的核心功能 ...

  7. 第二天——hibernate讲完了

    hibernate 逐步优化 第一步 只按照步骤来提取的 jre包导入错误 第二步 继续封装,把增删改查提取出来,同时进行代码的封装 HQL语句 be stranger in the code .be ...

  8. U3D 实现子弹发射效果

    首先,这里子弹要模拟的相似的话,用2D刚体比较好,会有重力,自由落体运动. using UnityEngine; using System.Collections; public class gun ...

  9. 手势交互之GestureOverlayView

    一种用于手势输入的透明覆盖层,可以覆盖在其他空间的上方,也可包含在其他控件 android.gesture.GestureOverlayView 获得手势文件 需要用GesturesBuilder,如 ...

  10. SQL Server 的远程连接(转载)

    SQL Server默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQLServer2012数据库,需要确认以下环节: 1)如果是工作组环境,则需要使用SQL Server身份验证 ...