机器学习、神经网络计算过程的矩阵化与向量化

为什么需要矩阵化向量化运算过程?

numpy在实现内部运算的时候,对矩阵运算过程进行了优化,且优化效果特别明显。如果我们使用的是原始的for循环虽然也可以完成任务,但是频繁的使用for循环将会大大的增加计算时间。我们应该尽量把运算向量化,交给numpy去完成。 
举个例子: 
一个输入样本X由1000000个特征组成的行向量,现在想计算 这里写图片描述的值。

其中这里写图片描述 
那么有两种写法:

import  numpy as np
import  time

def mod1(X):
    sum=0
    l=np.shape(X)[1]
    for i in range(l):
        sum=sum+X[0][i]**2
    return sum

def mod2(X):
    return np.matmul(X,np.transpose(X))

x=np.random.rand(1,1000000)
start=time.clock()
r1=mod1(x)
end1=time.clock()
r2=mod2(x)
end2=time.clock()
print(r1,(end1-start)/1000.0)
print(r2,(end2-end1)/1000.0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

mod1(X)使用的是for循环,这是一种特别容易想到的实现方法。

mod2(X)则将输入看作一个行向量,通过公式X·X^T 来计算。

我们看运行结果:

333247.873178 0.0011849279121984469
[[ 333247.87317754]] 7.115206039483013e-07
  • 1
  • 2

可以看到,使用向量化后的方法是10^-7这个数量级,而使用for循环的是10^-3这个数量级。运算时间差别也是有点大。

如何进行矩阵化、向量化

首先我们先考虑如何让单个输入样本向量化。 
举个例子: 
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

其它

该方法同时与适用于tensorflow中,因为tensorflow里面的矩阵运算模块就是基于numpy实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值