【又一重磅】再获翻译授权,斯坦福CS231N深度学习与计算机视觉
本文为斯坦福大学CS231N课程的中文版内容笔记,已获得斯坦福大学课程Andrej Karpathy教授的授权翻译与发表。大数据文摘作品,未经授权禁止转载,转载具体要求见文末。
翻译:寒小阳 龙心尘
编者按:本期文章是我们为读者带来斯坦福课程文章第二个系列的【斯坦福深度学习与计算机视觉课程】专题第一期。文章内容为斯坦福CS231N系列,供有兴趣的读者感受、学习。大数据文摘将陆续发布译文,免费分享给各位读者。所有译者均为志愿者,如果你和我们一样,是有能力、愿分享的朋友,请加入我们。在大数据文摘后台回复“志愿者”,了解更多。
斯坦福大学CS231N课程是深度学习与计算机视觉方面的经典教程,业界评价很高。之前也有国内朋友做一些零星的翻译,为了与更多读者分享高品质内容,大数据文摘对其进行了系统全面的翻译,后续内容将陆续推出,视频翻译正在进行,也欢迎更多感兴趣的志愿者加入我们。
由于微信后台的代码编辑无法实现,我们采用了图片插入的方式展示代码,点击图片可查看更清晰的图片。
同时,大数据文摘之前已获得授权的斯坦福课程第一个系列斯坦福大学CS224d课程已经完成了七个课时,我们将在每个周三继续推送后续内容,敬请关注。
此外,对于有兴趣进一步学习交流的读者,我们将通过QQ群(鉴于微信人数限制问题)组织进行学习交流。
长按以下二维码将直接跳转至QQ加群
或者通过群号码564538990进群
斯坦福CS231N深度学习与计算机视觉
第一弹:基础介绍
◆ ◆ ◆
1.导 读
计算机视觉/computer vision是一个火了N年的topic。持续化升温的原因也非常简单:在搜索/影像内容理解/医学应用/地图识别等等领域应用太多,大家都有一个愿景『让计算机能够像人一样去"看"一张图片,甚至"读懂"一张图片』。
有几个比较重要的计算机视觉任务,比如图片的分类,物体识别,物体定位于检测等等。而近年来的神经网络/深度学习使得上述任务的准确度有了非常大的提升。加之最近做了几个不大不小的计算机视觉上的项目,爱凑热闹的博主自然不打算放过此领域,也边学边做点笔记总结,写点东西,写的不正确的地方,欢迎大家提出和指正。
◆ ◆ ◆
2.基础知识
python是一种长得像伪代码,具备高可读性的编程语言。
优点挺多:可读性相当好,写起来也简单,所想立马可以转为实现代码,且社区即为活跃,可用的package相当多;缺点:效率一般。
2.1.1 基本数据类型
最常用的有数值型(Numbers),布尔型(Booleans)和字符串(String)三种。
数值型(Numbers)
可进行简单的运算,如下:
PS:python中没有x++ 和 x-- 操作
布尔型(Booleans)
包含True False和常见的与或非操作
字符串型(String)
字符串可以用单引号/双引号/三引号声明
字符串对象有很有有用的函数:
2.1.2 基本容器
列表/List
和数组类似的一个东东,不过可以包含不同类型的元素,同时大小也是可以调整的。
列表最常用的操作有:
切片/slicing
即取子序列/一部分元素,如下:
循环/loops
即遍历整个list,做一些操作,如下:
可以用enumerate取出元素的同时带出下标
List comprehension
这个相当相当相当有用,在很长的list生成过程中,效率完胜for循环:
你猜怎么着,list comprehension也是可以加多重条件的:
字典/Dict
和Java中的Map一样的东东,用于存储key-value对:
对应list的那些操作,你在dict里面也能找得到:
循环/loops
元组/turple
本质上说,还是一个list,只不过里面的每个元素都是一个两元组对。
2.1.3 函数
用def可以定义一个函数:
类/Class
python里面的类定义非常的直接和简洁:
2.2.NumPy基础
NumPy是Python的科学计算的一个核心库。它提供了一个高性能的多维数组(矩阵)对象,可以完成在其之上的很多操作。很多机器学习中的计算问题,把数据vectorize之后可以进行非常高效的运算。
2.2.1 数组
一个NumPy数组是一些类型相同的元素组成的类矩阵数据。用list或者层叠的list可以初始化:
生成一些特殊的Numpy数组(矩阵)时,我们有特定的函数可以调用:
2.2.2 Numpy数组索引与取值
可以通过像list一样的分片/slicing操作取出需要的数值部分。
还可以这么着取:
我们还可以通过条件得到bool型的Numpy数组结果,再通过这个数组取出符合条件的值,如下:
Numpy数组的类型
2.2.3 Numpy数组的运算
矩阵的加减开方和(元素对元素)乘除如下:
矩阵的内积是通过下列方法计算的:
特别特别有用的一个操作是,sum/求和(对某个维度):
还有一个经常会用到操作是矩阵的转置,在Numpy数组里用.T实现:
2.2.4 Broadcasting
Numpy还有一个非常牛逼的机制,你想想,如果你现在有一大一小俩矩阵,你想使用小矩阵在大矩阵上做多次操作。额,举个例子好了,假如你想将一个1*n的矩阵,加到m*n的矩阵的每一行上:
更多Broadcasting的例子请看下面:
2.3 SciPy
Numpy提供了一个非常方便操作和计算的高维向量对象,并提供基本的操作方法,而Scipy是在Numpy的基础上,提供很多很多的函数和方法去直接完成你需要的矩阵操作。有兴趣可以浏览查看具体的方法,函数略多,要都记下来有点困难,随用随查吧。
向量距离计算需要特别拎出来说一下的是,向量之间的距离计算,这个Scipy提供了很好的接口scipy.spatial.distance.pdist:
2.4 Matplotlib
这是python中的一个作图工具包。如果你熟悉matlab的语法的话,应该会用得挺顺手。可以通过matplotlib.pyplot.plot了解更多绘图相关的设置和参数。
结果如下:
2.5 简单图片读写
可以使用imshow来显示图片。
参考资料与原文:
◆ ◆ ◆
大数据文章斯坦福深度学习课程
大数据文摘后台回复“志愿者”,了解如何加入我们
专栏主编
项目管理
内容运营:魏子敏
统筹:汪德诚
往期精彩文章推荐,点击图片可阅读
翻译斯坦福大学课程:深度学习与自然语言处理
斯坦福深度学习课程第二弹:词向量内部和外部任务评价
斯坦福深度学习课程第三弹:神经网络与反向传播
斯坦福深度学习课程第四弹:作业与解答
斯坦福深度学习课程第五弹:作业与解答2
斯坦福深度学习课程第六弹:一起来学TensorFlow