zoukankan      html  css  js  c++  java
  • 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, [], 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啊,看着那个转置符号变成那样很不爽。。。

  • 相关阅读:
    用例图解析
    A B C D类网络地址
    B-树特征
    常用的中间代码
    UML图
    关于文件索引的一道习题
    数据流图的一些原则
    系统总线
    各种排序方法的时间复杂度、空间复杂度和稳定性统计表
    模拟银行自助终端系统
  • 原文地址:https://www.cnblogs.com/bzjia-blog/p/3370869.html
Copyright © 2011-2022 走看看