zoukankan      html  css  js  c++  java
  • 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 3:Vectorization

    1 Vectorization 简述

    Vectorization 翻译过来就是向量化,各简单的理解就是实现矩阵计算。
    为什么MATLAB叫MATLAB?大概就是Matrix Lab,最根本的差别于其它通用语言的地方就是MATLAB能够用最直观的方式实现矩阵运算。MATLAB的变量都能够是矩阵。
    通过Vectorization,我们能够将代码变得极其简洁。尽管简洁带来的问题就是其它人看你代码就须要研究一番了。但不论什么让事情变得simple的事情都是值得去做的。


    关于Vectorization核心在于代码的实现,以下我们直接通过Linear Regression和Logistic Regression的练习来看看怎样Vectorization。

    2 Linear Regression的Vectorization

    基本的不同点就是计算cost function和gradient的方法。

    先看看一般的通过循环计算的方法:

    function [f,g] = linear_regression(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);
      n=size(X,1);
    
      f=0;
      g=zeros(size(theta));
    
      %
      % TODO:  Compute the linear regression objective by looping over the examples in X.
      %        Store the objective function value in 'f'.
      %
      % TODO:  Compute the gradient of the objective with respect to theta by looping over
      %        the examples in X and adding up the gradient for each example.  Store the
      %        computed gradient in 'g'.
      
    %%% YOUR CODE HERE %%%
    
    % Step 1 : Compute f cost function
    for i = 1:m
        f = f + (theta' * X(:,i) - y(i))^2;
    end
    
    f = 1/2*f;
    
    % Step 2: Compute gradient 
    
    for j = 1:n
        for i = 1:m
            g(j) = g(j) + X(j,i)*(theta' * X(:,i) - y(i));
        end
        
    end
    

    再来看Vectorization的方法:
    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 = 1/2*sum((theta'*X - y).^2);
      
      g = X*(theta'*X - y)';

    能够看到。这里仅仅须要一条语句就搞定了。

    怎样思考Vectorization?
    我认为最简单的方法就是看Vector的size。

    比方f,我们最后要得到的是一个值。theta是nx1,X是nxm,y是1xm。我们须要theta和X相乘得到1xm好和y相减,那么肯定得把theta转置。theta‘xX 的size变化就1xnxnxm = 1xm,这就是我们想要的。
    得到1xm之后,因为f的值,我们使用sum函数得到

    对于gradient。也是一样的道理。

    g为nx1,而theta’xX-y为1xm,为了和X相乘。必须转置为mx1,从而nxmxmx1 = nx1.


    方法就是这样。
    以下直接贴出logistic_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 %%%
    f = -sum(y.*log(sigmoid(theta'*X)) + (1-y).*log(1 - sigmoid(theta'*X)));
    g = X*(sigmoid(theta'*X) - y)';

    得到的结果一样,但速度变快非常多
    Optimization took 6.675841 seconds.
    Training accuracy: 100.0%
    Test accuracy: 100.0%

    本节到此结束。


    【说明:本文为原创文章,转载请注明出处 blog.csdn.net/songrotek 欢迎交流QQ:363523441】

  • 相关阅读:
    mysql 中索引的限制
    lvm扩展记录
    转载:权威GIS类数据网站汇总
    转载:文件系统inodes使用率过高问题处理
    转载: k8s--pod的状态为evicted
    转载:k8s更新策略
    转载:Tomcat的JVM内存溢出解决方法
    软件推荐
    U盘安装Centos7 问题记录
    转载:Linux下查找文件
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6999386.html
Copyright © 2011-2022 走看看