美文网首页人工智能/模式识别/机器学习精华专题
UFLDL新版教程与编程练习(三):Vectorization(

UFLDL新版教程与编程练习(三):Vectorization(

作者: 赖子啊 | 来源:发表于2019-08-06 17:35 被阅读2次

    UFLDL是吴恩达团队编写的较早的一门深度学习入门,里面理论加上练习的节奏非常好,每次都想快点看完理论去动手编写练习,因为他帮你打好了整个代码框架,也有详细的注释,所以我们只要实现一点核心的代码编写工作就行了,上手快!

    有人对这一篇也有翻译,可以看一下

    第三节是:Vectorization(向量化)

    这节的思想就是,运用向量化编程思维,让代码运行更加高效,而不是用for循环,所以通过这次之后,我看到\sum这种符号,脑子里第一下就想,能不能用向量化编程。

    要用向量化编程,最好自己能写一两项求和的内容,之后再用类似内积的矩阵乘法来表述,教程写的不是太明白,自己能用矩阵乘法表示出来即可,注意矩阵维数对应就好!!

    当然还是学到了一个之后会经常用到的函数:bsxfun函数,用来作element-wise操作,即向量元素之间的对应操作,具体可看matlab官方文档介绍!

    下面是我用向量化编写之前的线性回归逻辑回归的代码(运行的时候去注释相应的非向量化调用语句):

    我这里用的是:matlab2016a

    linear_regression_vec.m:

    function [f,g] = linear_regression_vec(theta, X,y)
      %
      % Arguments:
      %   theta - A vector containing the parameter values to optimize.
      %   X - The examples stored in a matrix.
      %       X(i,j) is the i'th coordinate of the j'th example.
      %   y - The target value for each example.  y(j) is the target for example j.
      %
      m=size(X,2);
      
      % initialize objective value and gradient.
    %   f = 0;
    %   g = zeros(size(theta));
    
      %
      % TODO:  Compute the linear regression objective function and gradient 
      %        using vectorized code.  (It will be just a few lines of code!)
      %        Store the objective function value in 'f', and the gradient in 'g'.
      %
    %%% YOUR CODE HERE %%%
    f = 0.5 .* (theta' * X - y) * (theta' * X - y)';
    % g = g';
    g = (theta' * X - y) * X';
    g = g';
    

    运行结果:

    线性回归(向量化)
    线性回归(向量化)图
    可以看到和之前的0.78秒,现在有了较快的提升!

    linear_regression_vec.m:

    function [f,g] = logistic_regression_vec(theta, X,y)
      %
      % Arguments:
      %   theta - A column vector containing the parameter values to optimize.
      %   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);
      
      % initialize objective value and gradient.
      f = 0;
      g = zeros(size(theta));
      
    
      %
      % TODO:  Compute the logistic regression objective function and gradient 
      %        using vectorized code.  (It will be just a few lines of code!)
      %        Store the objective function value in 'f', and the gradient in 'g'.
      %
    %%% YOUR CODE HERE %%%
    h = inline('1./(1+exp(-z))');
    % Calculate f
    f = f - (y*log(h(X'*theta)) + (1-y)*log(1-h(X'*theta)));
    
    % Calculate g
    g = X * (h(theta' * X) - y)';
    

    运行结果:


    逻辑回归(向量化).png

    可以看到和之前的6.84秒,现在速度提升了23倍!

    有理解不到位之处,还请指出,有更好的想法,可以在下方评论交流!

    相关文章

      网友评论

        本文标题:UFLDL新版教程与编程练习(三):Vectorization(

        本文链接:https://www.haomeiwen.com/subject/htbwdctx.html