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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

ufldl出了新教程。感觉比之前的好,从基础讲起。系统清晰,又有编程实践。

在deep learning高质量群里面听一些前辈说,不必深究其它机器学习的算法,能够直接来学dl。

于是近期就開始搞这个了。教程加上matlab编程,就是完美啊。

新教程的地址是:http://ufldl.stanford.edu/tutorial/

本节学习链接:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/

softmax回归事实上是逻辑回归的扩展形式,

逻辑回归通经常使用作2类的分类器,

softmax则用作多类的分类器。

从数学形式来说,事实上逻辑回归就是softmax回归中k=2的情况。这点教程里也说了。

softmax的目标函数和參数的偏导数教程推导也非常清楚。

对于编程作业。因为对matlab实现不熟,跳了非常多坑。

弄了非常久,并且还仅仅是用for循环来实现的。

这次最终体会到了,for循环的性能之差了。迭代了200次。1个多小时。

也跟这个模型比前两个模型复杂有关。

先贴第一个版本号的代码吧。以后想出了向量化的编程再补上。

下面是softmax_regression.m的代码

function [f,g] = softmax_regression_vec(theta, X,y)  %  % Arguments:  %   theta - A vector containing the parameter values to optimize.  %       In minFunc, theta is reshaped to a long vector.  So we need to  %       resize it to an n-by-(num_classes-1) matrix.  %       Recall that we assume theta(:,num_classes) = 0.  %  %   X - The examples stored in a matrix.    %       X(i,j) is the i'th coordinate of the j'th example.  %   y - The label for each example.  y(j) is the j'th example's label.  %  m=size(X,2);  n=size(X,1);  %theta本来是矩阵,传參的时候,theta(:)这样进来的。是一个vector,仅仅有一列,如今我们得把她变为矩阵  % theta is a vector;  need to reshape to n x num_classes.  theta=reshape(theta, n, []);  num_classes=size(theta,2)+1;    % initialize objective value and gradient.  f = 0;  g = zeros(size(theta));  h = theta'*X;%h(k,i)第k个theta。第i个样本  麻痹还是得循环求啊  a = exp(h);  a = [a;ones(1,size(a,2))];%加行  b = sum(a,1);  for i=1:m    for j=1:num_classes      if y(i)!=j        continue;      end      f+=log2(a(j,i)/b(i));    end  end  f=-f;%符号  flag=0;  for j=1:num_classes-1    for i=1:m      if (y(i)==j)        flag =1;      else         flag=0;      end      g(:,j)+=X(:,i)*(a(j,i)/b(i)-flag);    end  end  %  % TODO:  Compute the softmax objective function and gradient using vectorized code.  %        Store the objective function value in 'f', and the gradient in 'g'.  %        Before returning g, make sure you form it back into a vector with g=g(:);  %%%% YOUR CODE HERE %%%    g=g(:); % make gradient a vector for minFunc

下面是执行结果:

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

旧教程http://deeplearning.stanford.edu/wiki/index.php/Exercise:Softmax_Regression

也有softmax的编程作业。里面也是识别手写体数字。

当中提到准确率的问题。

Our implementation achieved an accuracy of 92.6%. If your model’s accuracy is significantly less (less than 91%), check your code, ensure that you are using the trained weights, and that you are training your model on the full 60000 training images. Conversely, if your accuracy is too high (99-100%), ensure that you have not accidentally trained your model on the test set as well.

也就是说,从准确率来说,我的代码还是能够的。

接下来就是想办法实现向量化编程,加高速度了。


假设您有什么好想法。记得分享一下哦!

本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/38410123

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117747.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 比特币四之实现

    比特币四之实现正在学习区块链,如果我哪里有错误希望大家指出,如果有任何想法也欢迎留言。这些笔记本身是在typora上写的,如果有显示不正确的敬请谅解。笔记本身也是给我自己写的,所以如果有侵权的请通知我,我立即删除。文章目录4.1矿工的打包结果4.2节点的内容4.3挖矿效率的概率分析4.4比特币的总量4.5分叉攻击4.6有效数据不上链4.7双花攻击4.1矿工的打包结果这个主要是UTXO相关的,下面…

  • matlab激光雷达三角测距,三角测距激光雷达原理[通俗易懂]

    matlab激光雷达三角测距,三角测距激光雷达原理[通俗易懂]激光雷达近几年越来越普及了,复杂的比如应用在无人驾驶汽车上,简单的比如用在扫地机上去。随着无人驾驶和服务机器人行业的发展,后续激光雷达的应用会更广泛。激光雷达之所以流行,主要是因为它能够精准的测距,那么它是如何实现这样的测距功能的呢?主流的激光雷达主要是基于两种原理的,一种是三角测距法,一种是飞行时间(TOF)法。听名字可不要觉得很复杂,其实只需要高中知识,任何人都能看懂它的测距原理!今天咱们就先…

  • MYSQL | ERROR 1305(42000) SAVEPOINT *** DOES NOT EXIST「建议收藏」

    MYSQL | ERROR 1305(42000) SAVEPOINT *** DOES NOT EXIST

  • DB9串口和RJ45串口

    大家好,又见面了,我是你们的朋友全栈君。

  • singleTop和singleTask有什么区别

    singleTop和singleTask有什么区别文章来源:http://blog.csdn.net/leon8/article/details/6844397singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。(注意是栈顶,不在栈顶照样创建新实例!)singleTask模式:当intent到来,需要创建singleTask模式

  • HTTP 协议入门

    HTTP 协议入门

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号