深度学习系列教程-向量化

朋友们,如需转载请标明出处公众号:jack床长

新手请点击公众号里的“历史文章”从序言看起,否则你可能看不懂本篇文章

在讲人工智能之前,第一段我先讲讲其它的,讲一些我想讲的,讲一些大家需要知道的,讲一些对大家的人生有帮助的。首先感谢那些关心过我的读者朋友。上篇文章中我提到了要停笔去做近视手术。一些读者留言表达了他们的关心。非常感谢!!本篇文章第一段我就跟大家分享一下近视手术的经验吧。因为我觉得不少读者也是近视。都不容易呀,为了赚点钱把眼睛都弄坏了。当然也有不少朋友是玩游戏,看av看坏的。我就是初中时通宵打cs反恐精英弄坏的。我姐姐十年前其实就做了近视手术。直到现在一直很好,没有问题。但是我之前一直没有下定决心去做。因为怕。怕万一手术不成功,瞎了怎么办?怕即使成功了,但是老了之后瞎了怎么办?我是这样说服自己的:近视手术已经发展了很长时间了,好医院的成功率已经非常高了(一定要选好的医院,我是在桂林181解放军医院做的);手术是物理治疗法,是会造成眼睛的抵抗力下降一点点的,但是只要手术成功后,老了变瞎是不太可能的,而且即使老了会有问题,那个时候的科技我相信很容易就处理好了。就这样我毅然决定了做手术。手术前要做检查。检查是否可以做手术,也就是说不是所有人想做就能做的。例如一些眼压很高的人就不能做。检查好像都花了一千块钱左右。包括手术,总共花了22000,我做的是全飞秒激光手术,最贵的一种,也是对眼睛损伤最小的一种手术。手术其实就几分钟。是有一些痛的。我当时心里也非常害怕。做完后一个月内要复查几次。做完手术一个星期后,其实就可以正常用眼了。但是我还是很担心,几个月内都尽量少用电子产品。现在我的眼睛非常非常的好。

眼睛也好了,那么开始继续专研人工智能吧!本篇文章给大家介绍向量化。向量化对于人工智能编程是非常重要的。因为要训练一个智能模型需要非常多的数据。也就是说计算量很大,需要很长的计算时间,向量化可以大大提升计算速度(可节约高达300倍时间哦)。

说向量化之前,要先给大家介绍几个必须知道的概念。

第一,矩阵。矩阵是指由多行多列元素组成的一个集合。一个m*n的矩阵就有m行n列个元素。下图就是一个2*3的矩阵。

第二,向量。如果一个矩阵只有一列,那么这就是一个列向量。下图就是一个列向量。

如果只有一行,那么就是行向量。

从某个角度上来说,矩阵就是由多个向量组成的。

第三,矩阵相乘。假如有如下两个矩阵。

那么他们的乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列的元素的乘积之和。

上面那句话不好懂,看下面的例子就明白了。(图中我用颜色分出了每行每列帮助大家更容易理解)

向量的乘法就更容易理解了,如下图。

第四,python。人工智能常用的编程语言有python,keras等等,前期课程中我们先使用python。如果你之前没有接触过python,不用怕,它是非常简单的一门语言。其实编程语言之间都大同小异,我最开始用c++,后来又学了c#,后来做研发管理需要对团队中各种技术有所了解,所以又学习了java,objectC,unity3D,php,html…我的经验是,当遇到一门新的语言,不要一开始就做系统性的学习,这样会浪费你很多时间,因为很多东西都是和你之前学的语言一样的;正确的方法是:直接使用(或仅仅花几天时间看看他的基础知识,然后就直接使用),使用中遇到不懂的点再查它的开发文档。

知道上面四个概念后,下面我用一个超级简单的例子来向大家说明什么是向量化。

假如我们要用python编程来计算下面这个求和公式。

上式其实等于A1*B1+A2*B2+A3*B3

如果我们用非向量化的方式来实现的话,代码如下(本篇文章中,你只需要大致看懂这些代码就可以了,后面的文章我再给大家介绍如何用python编程)

A = [1,2,3]

B = [1,2,3]

res = 0

for i in range(0,3):

res+=A[i]*B[i]

而向量化的方式如下。

import numpy as np

A = [1,2,3]

B = [1,2,3]

res = np.dot(A,B)

上面这段代码中最关键的一行是np.dot(A,B)。dot执行了一个向量乘法运算,套入上面我向大家介绍的向量相乘知识,并可知它等价于上面的循环代码。

向量化可节约高达几百倍时间,为什么呢?有人是这样解释的:由于python是由c语言实现的,所以python每次在循环调用时都会先将代码转换成c语言,如果循环次数太多,那么这些转换消耗的总和就很大了。而向量化操作是把一堆计算一次性转换成c语言去实现,即消耗只有一次,所以快。这个说法我觉得是合理的。

无论如何,请切记在人工智能编程的过程中,要尽量尽量尽量用向量化取代循环代码。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G1KMTC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券