Deep Learning 学习随记(三)续 Softmax regression练习
上一篇讲的Softmax regression,当时时间不够,没把练习做完。这几天学车有点累,又特别想动动手自己写写matlab代码
所以等到了现在,这篇文章就当做上一篇的续吧。
回顾:
上一篇最后给出了softmax regression的代价函数和其偏导数,当然要实现的话基本也就是这两个函数的实现,为方便查看,这里再写一遍:
代价函数:
偏导数:
实现:
实现过程就是对MNIST手写数字库进行的分类(数字从0~9共10个)。
说实话,上面代价函数对于我这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 = theta*data;
NorM = bsxfun(@minus, M, max(M, [], )); %归一化,每列减去此列的最大值,使得M的每个元素不至于太大。
ExpM = exp(NorM);
P = bsxfun(@rdivide,ExpM,sum(ExpM)); %概率
cost = -/numCases*(groundTruth(:)'*log(P(:)))+lambda/2*(theta(:)'*theta(:)); %代价函数
thetagrad = -/numCases*((groundTruth-P)*data')+lambda*theta; %梯度
关于其中bsxfun的用法,是讲义给出的,果然好用的多。
另外一个需要我们自己填写的地方就是softmaxPredict.m:
%% ---------- YOUR CODE HERE --------------------------------------
% Instructions: Compute pred using theta assuming that the labels start
% from .
M = theta*data;
%pred = max(M,[],);
[Y,pred] = max(M,[],);
这里一开始写错了,pred取的是每一列的最大值了(pred = max(M,[],1)),应该取行号(代表的是10个数字中概率最大的那个数字)然后跟label对比求正确率。
然后就是结果:
迭代了100次达到上限,结束,最后的正确率是92.250%。
ps:
讲义地址:http://deeplearning.stanford.edu/wiki/index.php/Exercise:Softmax_Regression
里面有手写数字库等需要下载。
另外,这代码选项里怎么没有matlab啊,看着那个转置符号变成那样很不爽。。。
Deep Learning 学习随记(三)续 Softmax regression练习的更多相关文章
- Deep Learning 学习随记(四)自学习和非监督特征学习
接着看讲义,接下来这章应该是Self-Taught Learning and Unsupervised Feature Learning. 含义: 从字面上不难理解其意思.这里的self-taught ...
- Deep Learning学习随记(一)稀疏自编码器
最近开始看Deep Learning,随手记点,方便以后查看. 主要参考资料是Stanford 教授 Andrew Ng 的 Deep Learning 教程讲义:http://deeplearnin ...
- Deep Learning 学习随记(三)Softmax regression
讲义中的第四章,讲的是Softmax 回归.softmax回归是logistic回归的泛化版,先来回顾下logistic回归. logistic回归: 训练集为{(x(1),y(1)),...,(x( ...
- Deep Learning 学习随记(五)深度网络--续
前面记到了深度网络这一章.当时觉得练习应该挺简单的,用不了多少时间,结果训练时间真够长的...途中debug的时候还手贱的clear了一下,又得从头开始运行.不过最终还是调试成功了,sigh~ 前一篇 ...
- Deep Learning 学习随记(七)Convolution and Pooling --卷积和池化
图像大小与参数个数: 前面几章都是针对小图像块处理的,这一章则是针对大图像进行处理的.两者在这的区别还是很明显的,小图像(如8*8,MINIST的28*28)可以采用全连接的方式(即输入层和隐含层直接 ...
- Deep Learning 学习随记(五)Deep network 深度网络
这一个多周忙别的事去了,忙完了,接着看讲义~ 这章讲的是深度网络(Deep Network).前面讲了自学习网络,通过稀疏自编码和一个logistic回归或者softmax回归连接,显然是3层的.而这 ...
- Deep Learning学习随记(二)Vectorized、PCA和Whitening
接着上次的记,前面看了稀疏自编码.按照讲义,接下来是Vectorized, 翻译成向量化?暂且这么认为吧. Vectorized: 这节是老师教我们编程技巧了,这个向量化的意思说白了就是利用已经被优化 ...
- Deep Learning 学习随记(八)CNN(Convolutional neural network)理解
前面Andrew Ng的讲义基本看完了.Andrew讲的真是通俗易懂,只是不过瘾啊,讲的太少了.趁着看完那章convolution and pooling, 自己又去翻了翻CNN的相关东西. 当时看讲 ...
- Deep Learning 学习随记(六)Linear Decoder 线性解码
线性解码器(Linear Decoder) 前面第一章提到稀疏自编码器(http://www.cnblogs.com/bzjia-blog/p/SparseAutoencoder.html)的三层网络 ...
随机推荐
- SR4000笔记
长时间运行情况下需要有降温处理(40度以下) 建议使用触发模式而非连续模式 850nm波长的光(虽然无害,建议不要直视) 12V DC 滤波镜头(允许24个LED激光波长的通过) 快闪:获取数据 慢闪 ...
- Unity3d Realtime Dynamic Volume Clouds Rendering
Ray Marching体积渲染+perlin noise 动态效果: 博主近期渲染: 2016的渲染 2015后半段的渲染 ---- by wolf96
- oracle nologging用法
一.oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nolo ...
- Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake
水题 #include<iostream> #include<string> #include<algorithm> #include<cstdlib> ...
- Import the Add Email and Post Configuration to the SiteMap managed solution -Dynamices CRM
We have prepared a managed solution named Add Email and Post Configuration to SiteMap that you can i ...
- jQuery获取鼠标移动方向
<!doctype html> <html> <head> <meta http-equiv="Content-Type&q ...
- 如何让2个并列的div根据内容自动保持同等高度
最近在工作中碰到一个需求: 有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到"如果右 ...
- 获取datagrid中编辑列combobox的value值与text值
var ed = $('#dg').datagrid('getEditor', {index:editIndex,field:'productid'}); var productname = $(ed ...
- javascript网页弹出层练习
网页中经常出现很多"popup"弹窗效果,这里做一个练习,给我们初学者一个参考. HTML代码: <div id="popup"></div& ...
- 在Java项目中整合Scala
Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...