这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战
Σ( ° △ °|||)︴开局先来说几句废话。作为一个生物学的学生(当年所有专业选的都是计算机,结果被迫学生物了),无奈只好自学。我是用C++作为入门语言的,刚开始学数据结构的时候,因为是自学,很痛苦,我每天都在吐槽:有STL为什么还要自己写啊!!!后来学会了嘛,为了练练手,所以经常刷题的时候自己写一些甚至库函数已经有的功能来实现。那时在我眼里就是条条大路通罗马,反正都能得到同样的结果。虽然学了算法的时间复杂度啊怎么样的我也没太放入实际中考虑,毕竟平时刷题遇到的测试数据没那么大量。
后来一个学长跟我说,你可以闲着没事去看看库函数源代码是什么。比如人家的排序可能是好几种排序的组合体,都是各种大佬研究优化出来的算法。
言归正传
对于我们深度学习中一些公式也是如此,如果可以简化,可以用语言内置的线性代数的库那就再好不过了。
用内置算法的好处:
- 速度更快
- 用更少代码实现
- 相比于你自己写的更不易出错
- 更好地配合硬件系统
举个简单栗子:
可以将其看做是而进行计算,这样就转化为两个向量的乘积了。
octave:
Unvectorized implementation
就是声明两个向量,遍历。
% 没有向量化代码如下:
prediction =0.0;
for j = 1:n+l
prediction = prediction + theta(j) * x(j)
end
复制代码
Vectorized implementation
% 向量化之后代码如下:
prediction= theta' * x; % 英文单引号 ' 表示求矩阵或向量的转置。忘记的回去看octave语法
复制代码
C++:
Unvectorized implementation
double prediction = 0.0;
for(int j = 0; j<=n; j++)
{
prediction += theta[j]*x[j];
}
复制代码
Vectorized implementation
double prediction = theta.transpose()*x;
复制代码
再来个栗子:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐