Deep Learning 学习随记(三)续 Softmax regression练习

上一篇讲的Softmax regression,当时时间不够,没把练习作完。这几天学车有点累,又特别想动动手本身写写matlab代码php

因此等到了如今,这篇文章就当作上一篇的续吧。编程

回顾:框架

上一篇最后给出了softmax regression的代价函数和其偏导数,固然要实现的话基本也就是这两个函数的实现,为方便查看,这里再写一遍:ide

代价函数:函数

偏导数:spa

实现:code

实现过程就是对MNIST手写数字库进行的分类(数字从0~9共10个)。blog

说实话,上面代价函数对于我这matlab用的不熟的人来讲,着实吓了一跳,好在看了讲义,里面真是深刻浅出啊,至关于手把手教咱编程啊,太赞了~ci

讲义里给出了代码的基本框架,咱们只需填几个地方就行,主要就是上面代价函数和偏导数部分的实现,并且这部分实现的一些小技巧讲义里面也告诉咱们了。io

上面这两个函数的代码实现就几行,是在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, [], 1));  %归一化,每列减去此列的最大值,使得M的每一个元素不至于太大。
ExpM = exp(NorM);
P = bsxfun(@rdivide,ExpM,sum(ExpM));      %几率
cost = -1/numCases*(groundTruth(:)'*log(P(:)))+lambda/2*(theta(:)'*theta(:)); %代价函数
thetagrad =  -1/numCases*((groundTruth-P)*data')+lambda*theta;       %梯度

关于其中bsxfun的用法,是讲义给出的,果真好用的多。

另一个须要咱们本身填写的地方就是softmaxPredict.m:

%% ---------- YOUR CODE HERE --------------------------------------
%  Instructions: Compute pred using theta assuming that the labels start 
%                from 1.
M = theta*data;
%pred = max(M,[],1);
[Y,pred] = max(M,[],1);

这里一开始写错了,pred取的是每一列的最大值了(pred = max(M,[],1)),应该取行号(表明的是10个数字中几率最大的那个数字)而后跟label对比求正确率。

而后就是结果:

迭代了100次达到上限,结束,最后的正确率是92.250%。

ps:

讲义地址:http://deeplearning.stanford.edu/wiki/index.php/Exercise:Softmax_Regression

里面有手写数字库等须要下载。

 另外,这代码选项里怎么没有matlab啊,看着那个转置符号变成那样很不爽。。。

相关文章
相关标签/搜索