设e={(1/n,0):n∈n},则边界点为什么

An_Feng_z的博客
https://blog.csdn.net/
https://static-blog.csdn.net/images/logo.gif
https://blog.csdn.net/An_Feng_z
https://blog.csdn.net/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
摘要: 本文将对 Capsule 进行分析。 整体上来看,Capsule 算法的细节不是很复杂,对照着它的流程把 Capsule 用框架实现它基本是没问题的。所以,困难的问题是理解 Capsule 究竟做了什么,以及为什么要这样做,尤其是 Dynamic Routing 那几步。
论文原网址:
根据论文完成的部分
整体上来看,Capsule 算法的细节不是很复杂,对照着它的流程把 Capsule 用框架实现它基本是没问题的。所以,困难的问题是理解 Capsule 究竟做了什么,以及为什么要这样做,尤其是 Dynamic Routing 那几步。
众所周知,Capsule 给人的感觉就是“似乎有太多人为约定的内容”,没有一种“虽然我不懂,但我相信应该就是这样”的直观感受。所以尽可能将 Capsule 的来龙去脉思考清楚,使我们能觉得 Capsule 是一个自然、流畅的模型,甚至对它举一反三。
虽然都是先分析了动态路由的结果,然后指出输出是输入的某种聚类,这个“从结果到原因”的过程多多少少有些望文生义的猜测成分。但这次则反过来,直接确认输出是输入的聚类,然后反推动态路由应该是怎样的,其中含糊的成分大大减少。
Capsule框架
图1:Capsule框架的简明示意图
与其说 Capsule 是一个具体的模型,倒不如说 Capsule 是一个建模的框架,而框架内每个步骤的内容,是可以自己灵活替换的,而 Hinton 所发表的论文,只是一个使用案例。
这是一个怎样的框架呢?
图2:Capsule的每个特征都是向量,并且通过聚类来递进
当然,对于关注新闻的读者来说,这已经不是什么新消息。可能读者会有疑问:用向量来表示特征有什么稀奇的,本来神经网络的特征输入不就是一个向量吗?
原来神经网络(MLP)的每一层输入是一个向量,然后输出是,我们就将 x 的每一个分量都看成一个特征,那么每个特征都是标量了。
而所谓的特征向量化后,那么每一层的输入变成了,然后输出是 ,这时候的输入 x 也看成是 n 个特征,但每个特征都是一个 dx 维向量;输出 y 则看成是 k 个特征,每个特征是一个 dy 维向量。
换一个角度看,其实就是说 MLP 每一层的输入输出由单个的向量变成了向量的集合(矩阵)。
或者我们可以将它换一个名称,叫做“特征的分布式表示”。也许有读者看到了“分布式表示”,会想起 NLP 中的词向量。
没错,词向量一开始确实叫做“分布式表示”(Distributed Representation),当看到 Capsule 的这一特点,第一反应也就是词向量。
同时也可以用词向量代替 one hot 来表示一个词,这样表达的信息就更为丰富了,而且所有的词都位于同一向量空间,方便后续处理。
此外,事实上图像中早也有这样的例子,众所周知彩色图像一般有 RGB 三个通道,每个通道 256 个选择,所以一共可以表达 256 的三次方,即
种颜色(约 1700 万)。
为什么不直接用 1700 万个数字来分别表示这 1700 种颜色,而要分开 3 组,每组 256 个数字呢?
这其实也是一种分布式表示,这样可以更好地表达色彩的多样性。比如红色的相近颜色是什么色?也许有人说橙色,也有人说紫色,也有可能是粉红,单一一个数字难以表达多种的相似性,而分组后则可以。
更进一步说,我们在对图像不断进行卷积操作时,所得结果的通道维度,其实就是图像特征的一种分布式表示了。
Capsule 的第二个特点,是通过聚类来组合特征。
组合与表达
通过将底层特征组合为上层的特征,是跟我们的认知规律是相符的。在NLP中,我们有“字–&词–&句–&段”的层层组合;在图像中,我们也有“点–&线–&面–&体”的层层组合。
面对新事物(上层特征),我们总会将它分解为我们熟悉的一些事物(底层特征),然后脑海里将这些事物映射到这个新事物(特征组合)。
对于我们来说,这个分解和组合的过程,不一定有什么目的,而只是为了用我们自己的方式去理解这个新事物(在大脑中形成良好的特征表达)。
这也就能理解 Hinton 诟病深度学习、发展 Capsule 的原因之一了,因为他觉得现在深度学习的模型针对性太强,比如 MNIST 分类模型就只能做单个数字的识别,多个数字的识别就要重新构建数据集、重新设计并训练模型。
而事实上,我们的根本目的并不是单纯地做任务,而是通过任务形成良好的、普适的特征表达,这样才有可能形成真正的人工智能。
特征间聚类
那么,怎么完成这个组合的过程呢?试想一下,两个字为什么能成为一个词,是因为这两个字经常“扎堆”出现,而且这个“堆”只有它们俩。这就告诉我们,特征的聚合是因为它们有聚类倾向,所以 Capsule 把聚类算法融入到模型中。
要注意,我们以前所说的聚类,都是指样本间的聚类,比如将 MNIST 的图片自动聚类成 10 个类别,或者将 Word2Vec 训练而来的词向量聚类成若干类,聚类的对象就是一个样本(输入)。
而 Capsule 则设想将输入本身表示为若干个特征向量,然后对这些向量进行聚类(特征间的聚类),得到若干中心向量,接着再对这些中心向量聚类,层层递进,从而完成层层抽象的过程。这是一种特征间的聚类。
现在问题就来了。既然是聚类,是按照什么方法来聚类的呢?然后又是怎么根据这个聚类方法来导出那个神奇的 Dynamic Routing 的呢?后面我们会从K-Means出发来寻根问底,现在让我们先把主要思路讲完。
特征显著性
通过特征的组合可以得到上层特征,那如何对比特征的强弱程度呢?
Capsule 的答案是:模长。这就好比在茫茫向量如何找出“突出”的那个?只需要看看谁更高就行了。因此通过特征向量的模长来衡量它自己的“突出程度”,显然也是比较自然的选择。
此外,一个有界的度量也是我们希望的,因此我们对特征向量做一个压缩:
压缩的方案并不唯一,这里就不展开了。不过我在实验过程中,发现将 1 替换为 0.5 能提升性能。
图3:Capsule通过特征向量的聚类,来刻画特征的组合特性
为了突出模长的这一含义,也需要在设计模型的时候有所配合。如图,尽管 v1 所代表的类所包含的特征向量 u1,u2,u4,u8 的模长均比较小,但因为成员多(“小弟多”),因此 v1 的模长也能占优(“势力大”)。
这说明,一个类要突出,跟类内向量的数目、每个类内向量本身的模长都有关联。后面我们也会看到 Capsule 是如何体现这一点的。
K-Means新探
既然本文不断强调 Capsule 是通过聚类来抽象特征的,那么就有必要来细谈一下聚类算法了。Capsule 所使用的聚类算法,其实是 K-Means 的变种。
聚类算法有很多,理论上每种聚类算法都是可能的,然而要将聚类算法嵌入到 Capsule 中,还需要费上一点周折。
K-Means 聚类本质上是一种“中心聚类方法”——聚类就是找类别中心。为了定义中心,我们就需要一个相近程度的度量,常用的是欧氏距离,但这并不是唯一的选择。
所以这里我们干脆在一个更加一般的框架下介绍 K-Means:K-Means 希望把已有的数据 u1,u2,…,un 无监督地划分为 k 类,聚类的方法是找出 k 个聚类中心 v1,v2,…,vk,使得类内间隔最小:
这里 d 代表了相近程度的度量,所以这个式子的意思很简单,就是说每个 ui 只属于跟它最相近的那一类,然后将所有类内距离加起来,最小化这个类内距离:
显然,聚类的结果依赖于 d 的具体形式,这其实就告诉我们:无监督学习和有监督学习的差别,在于我们跟模型“交流”的方法不同。
有监督学习中,我们通过标注数据向模型传达我们的意愿;在无监督学习中,我们则通过设计适当的度量 d 来完成这个过程。
怎么去最小化 L 来求出各个中心呢?如果读者不希望细细了解推导过程,可以跳过这一节,直接看下一节。
因为 L 中有 min 这个操作,所以直接求它的梯度会有困难(不是不能求,而是在临界点附近不好处理),事实上有很多类似的问题没能得到很好的解决,都是因为它们的 loss 中有 min。
然而,这里我们可以“软化”这个 L,使得它可以求导。因为我们有一个很漂亮的公式:
如果取 K=1,显然括号里边就是 softmax 的分母,这也就是 softmax 的由来了——它是“soft”加“max”——“软的最大值”。
而我们有:
因此我们就得到:
现在这个近似的 loss 在全局都光滑可导了,因此我们可以尝试求它的梯度。
我们已经指明了是对 j 所在的维度来归一化。为了求出一个极小值,我们希望让 ?L/?vj=0,但得到的方程并不是简单可解的。因此,可以引入一个迭代过程,假设是 vj 的第 r 次迭代的结果,那么我们可以让:
如果可以从上述方程解出,那么就可以从中得到一个迭代格式。
现在就可以把我们选择的度量代入(8)式进行计算了。我们可以看一个最基本的例子,这时候就有:
从而我们可以解出:
如果取 K→+∞,那么非 0 即 1,所以上式就是说(读者可以自己证明一下)是距离最近的那些 ui 的平均值。
这就得到了我们平时说的 K-Means 聚类算法。
内积相似度
欧氏距离并不适合用在 Capsule 中,这是因为欧氏距离得到的中心向量是类内的向量的平均,这样类内向量越多,也不会导致中心向量的模越长,这不满足我们前面说的“小弟越多,势力越大”的设计。
什么距离比较适合呢?在论文 Dynamic Routing Between Capsules 中有一段话:
The initial coupling coefficients are then iteratively refined by measuring the agreement between the current output vjvj of each capsule, jj, in the layer above and the prediction u? j|i made by capsule ii.
The agreement is simply the scalar product aij=vj?u^j|i…
对应到本文,大概的意思是用内积?ui,vj?作为相似度的度量,也就是说,d(ui,vj)=-?ui,vj?。但仔细思考就会发现问题,因为这样的 d 是无下界的。
无下界的函数我们不能用来做 loss,所以我一直被这里困惑着。直到有一天,我觉得可以将 vj 先归一化,然后再算内积,这样一来实际上是:
现在对于固定的 ui,不管 vj 怎么变,d(ui,vj) 就有下界了。所以这样的 d 是可以用来作为 loss,代入(8)式算,最终得到的结果是:
注意这结果只能说明和的方向是一样的,但不能说明它们两个是相等的。然而,我们确实可以简单地取:
如果取 K→+∞ 的极限,那么就是说是距离最近的那些 ui 的和。
由于现在是求和,就可以体现出“小弟越多,势力越大”的特点了。注意,这里和欧氏距离那都出现了“最近”,两个最近的含义并不一样,因为所选用的 d 不一样。
经过漫长的准备,Dynamic Routing 算法已经呼之欲出了。
按照第一部分,我们说 Capsule 中每一层是通过特征间聚类来完成特征的组合与抽象,聚类需要反复迭代,是一个隐式的过程。我们需要为每一层找到光滑的、显式的表达式:
才能完成模型的训练。动态路由就是通过迭代来写出这个(近似的)显式表达式的过程。
假设 Capsule 的输入特征分别为 u1,u2,…,un,然后下一层的特征向量就是 v1,v2,…,vk,它就是前一层 n 个向量聚为 k 类的聚类中心,聚类的度量是前面的归一化内积,于是我们就可以写出迭代过程:
这个版本是容易理解,但由于存在 argmax 这个操作,我们用不了梯度下降,而梯度下降是目前求模型其他参数的唯一方法。为了解决这个问题,我们只好不取 K→+∞ 的极限,取一个常数 K&0,然后将算法变为:
然而这样又新引入了一个参数 K,咋看上去 K 太大了就梯度消失,K 太小了就不够准确,很难确定。不过后面我们将会看到,直接让 K=1 即可,因为 K=1 的解空间已经包含了任意 K 的解。最终我们可以得到:
有意思的是,最后导出的结果,不仅跟 Hinton 的原始论文 Dynamic Routing Between Capsules 有所出入,跟我前一篇介绍也有出入。
其中,最明显的差别是在迭代过程中用 vj/‖vj‖ 替换了 squash(vj),仅在最后输出时才进行 squash。实验表明这有助于提升特征的表达能力,它在我的前一文的数字实验(单数字训练,双数字预测)中,能达到 95% 以上的准确率(原来是 91%)。
这样就完了?远远还没有。我们还要解决好几个问题。
如何做好类别初始化? 因为聚类结果跟初始化有关,而且好的初始化往往是聚类成功的一大半。现在我们要将聚类这个过程嵌入到模型中,作为模型的一部分,那么各个应该怎么选取呢?
如果同一初始化,那么无法完成聚类过程;如果随机初始化,那又不能得到确定的聚类结果,就算类中心向量不变,但是类的顺序也可能变化。
如何识别特征顺序?我们知道,聚类的结果跟样本的顺序是无关的,也就是说,如果将输入向量的顺序打乱,聚类的结果还是一样的。
对于样本间的聚类,这是一个优点;然而如果是特征间的聚类,那么就有可能不妥了,因为不同顺序的特征组合可能代表不同的含义(就好比词序不同,句子含义也会不同),如果都给出一样的结果,那么就丧失了特征的序信息了;
如何保证特征表达能力?动态路由将上层 Capsule 作为底层 Capsule 的聚类结果,每个类可能包含多个特征向量,但如果仅仅用类中心向量整个类的整体特征(上层特征),会不会降低了上层 Capsule 的特征表达能力?
有意思的是,以上三个问题都可以由同一个方法解决:加变换矩阵。
首先,为了模型的简洁性,我们将所有 ui 的和平均分配到每个类中作为。那怎么分辨出各个不同的类呢?我们在输出到每个类之前,给每个类都配一个变换矩阵 Wj,用来分辨不同的类,这时候动态路由变成了:
这就是我前一篇介绍中所说的共享权重版的 Capsule。细细斟酌就会发现,引入训练矩阵 Wj 是个非常妙的招数,它不仅让聚类算法在同一初始化时仍能分辨出不同的类,而且通过 Wj 可以改变 ui 的维度,从而也就改变了聚类后的中心向量的维度,这样也就能保证中心向量的特征表达能力。
此外还有一个好处,那就是?Wjui,Kvj?=?(KWj)ui,vj?,也就是说它相当于把前面的参数 K 也包含了,从而我们可以放心设 K=1 而不用担心准确性不够——如果有必要,模型会自己去调整 Wj 达到调整 K 的效果。
现在只剩下最后一个问题了:识别输入特征的顺序。跟识别每一个类一样,我们也可以给每个输入都配一个变换矩阵 W?i,用来分辨不同位置的输入,这样一来动态路由变为:
如果觉得这样太累赘,那么可以把 WjW?i 替换成一个整体矩阵 Wji,也就是对每对指标 (i,j) 都配上一个变换矩阵,这样的好处是整体更简单明了了,缺点是矩阵数目从 n+k 个变成了 nk 个:
这便是全连接版的动态路由。然而并不是每次我们都要分辨不同位置的输入,对于变长的输入,我们就很难给每个位置的输入都分配一个变换矩阵,这时候共享版的动态路由就能派上用场了。总的来说,全连接版和共享版动态路由都有其用武之地。
图4:Capsule的变换矩阵可能的所在之处
个人认为,Capsule 的确是新颖的、有前景的的研究内容。也许它不一定(但也是有可能的)是未来的发展方向。Geoffrey Hinton 大胆地将聚类的迭代过程融入到神经网络中,因此诞生了 Capsule,那是不是说,可以考虑将其他比较直观的算法也融入到里边,从而造就其他有意思的玩意?让我们拭目以待。
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
教你用 Python 来玩微信跳一跳
2017 年 12 月 28 日下午,微信发布了 6.6.1 版本,加入了「小游戏」功能,估计是为了推广小程序(登第说的),同时据小道消息,这玩意儿也是抄袭的哟,具体抄谁的,我就不具体说了,想知道的去问老郭或袁渊。
看看该手动的效果,轻轻松松上1000不成问题,但是如果突破了1000就成问题(70%的概率是刷的),我现在已经被微信给拉黑了,分数传不上去,先立个flag:
看看效果:
可能刚开始上手的时候,因为时间距离之间的关系把握不恰当,只能跳出几个就掉到了台子下面。如果能利用图像识别精确测量出起始和目标点之间测距离,就可以估计按压的时间来精确跳跃。
将手机点击到《跳一跳》小程序界面
用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来
adb shell screencap -p /sdcard/autojump.png
adb pull /sdcard/autojump.png
计算按压时间
用 Matplotlib 显示截图,用鼠标先点击起始点位置,然后点击目标位置,计算像素距离;
用 ADB 工具点击屏幕蓄力一跳
adb shell input swipe x y x y time(ms)
1.安装numpy、matplotlib、PIL、cv2库
2.利用ADB调试方法连接上手机,需要解除手机的usb调试安全设置,然后按照电脑屏幕上的操作步骤即可。
3.可以用pycharm、sublime、ipython、cmd-shell等编译执行工具(我用到位cmd-shell):
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
欢迎使用Markdown编辑器写博客
本Markdown编辑器使用修改而来,用它写博客,将会带来全新的体验哦:
Markdown和扩展Markdown简洁的语法
代码块高亮
图片链接和图片上传
LaTex数学公式
UML序列图和流程图
离线写博客
导入导出Markdown文件
丰富的快捷键
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个等,详细语法参考帮助?。
本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考.
Markdown Extra 表格语法:
可以使用冒号来定义对齐方式:
Markdown Extra 定义列表语法:
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 & param2:
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
&&& message = '''interpreter
... prompt'''
生成一个脚注.
用 [TOC]来生成目录:
使用MathJax渲染LaTex 数学公式,详见.
行内公式,数学公式为:Γ(n)=(n-1)!?n∈N。
块级公式:
x=-b±b2-4ac-------√2a
更多LaTex语法请参考 .
可以渲染序列图:
Created with Rapha?l 2.1.2张三张三李四李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。
或者流程图:
Created with Rapha?l 2.1.2开始我的操作确认?结束yesno
关于 序列图 语法,参考 ,
关于 流程图 语法,参考 .
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。 
用户可以选择
把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
IE9以下不支持
IE9,10,11存在以下问题
不支持离线功能
IE9不支持文件导入导出
IE10不支持拖拽文件导入
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
语音和自然语言
人工智能带来了精致可用的人机交互方式。和其他细分领域相比,语音和自然语言处理的融资额和估值在本榜单中均属最高。
市值/估值/融资额
人工智能综合研究
搜索引擎、知识图谱、输入法、语音交互产品等
估值约50亿美元
自然语言处理
个性化智能助理
三轮融资 3.4 亿美元
语音技术和自然语言处理
输入法、教育、电信等行业解决方案
市值约 393 亿人民币
智能语音交互和自然对话
车载、智能家居和智能机器人等智能硬件的语音交互服务
B 轮融资 2 亿人民币
声源分离、声音增强、声纹识别、麦克风阵列
会议转录、通讯、机器人、智能家居、虚拟现实、增强现实、混合现实
情感对话机器人、语音情感技术、多模态情感识别
竹间个人助理机器人小影、金融机器人、客服机器人
2500万美元融资
语音识别技术、自然语言处理技术(NLP)
电话语言反馈、预测销售结果、自动信息检索
1400万美元的A轮融资
理解和分类用户请求
1200万美元的A轮融资
计算机视觉
计算机视觉是目前机器感知中最突出的形式。它是受到深度学习崛起影响最大的人工智能子领域,并在一些视觉任务上帮助计算机首次实现了超越人类的水平。在这个分类中,既有在动态识别方面依托于计算机视觉和深度学习技术为用户提供基于图像理解的信息获取和人机交互产品的 Clarifai ,也有充满想象力的将卫星图片和图像识别结合起来进行预测分析的 Orbital Insight 。在具体应用方面,来自英国的 Ditto Labs 和新加坡的 ViSenze 通过对计算机视觉技术的应用分别在电子商务和数字营销领域进行了一些落地实践。
市值/估值/融资额
计算机视觉
图像及视频识别及图像检索 API
B轮:3000 万美元
计算机视觉和深度学习
实时面部表情分析和情绪识别解决方案
四轮融资 3372 万美元
计算机视觉
电子商务、移动商务、 在线广告等图像识别解决方案
两轮融资 1400 万美元
Orbital Insight
计算机视觉、深度学习和数据科学
分析海量卫星图像,用于经济趋势分析和公益研究
C轮融资共 5千万美元
Planet Labs
计算机视觉和数据科学
将卫星图像识别用于农业、城市规划和灾害响应等
融资 1830万美元
Descartes Labs
计算机视觉和深度学习
通过DLFP平台为农业提供数据分析和预测的解决方案
B轮 3千万美元
计算机视觉和深度学习
人脸识别、危险品识别、行为检测、车辆检测等的安防监控系统
4.1亿美元最新融资
计算机视觉和深度学习
Face++人脸识别云服务平台、Image++图像识别平台、VisionHacker移动游戏工作室
C轮4.6亿美元融资
计算机视觉和深度学习
基于图像理解的信息获取和人机交互服务
3.8亿元C轮融资
计算机视觉和深度学习
图像识别、智能审核、图片增值等云服务
新一轮千万美元融资
深度学习、计算机视觉
帮助机器人和智能设备学习和适应环境的软件
A轮融资约1400万美元
人脸识别、计算机视觉
金融机构人脸识别应用、公安系统实时布控、追逃等
B 轮 5亿人民币
芯片和硬件
本榜单中的芯片和硬件相关的企业主要集中于人工智能芯片和其他硬件研究。其中,来自美国的 ALCES 通过人工智能视觉算法在手机摄像头的微小尺寸上实现高清超动态的 3D 图像感知,大大提高智能机器对环境的感知水平,致力于深度学习芯片架构的 Wave Computing 则推出了自己的 DPU 。
市值/估值/融资额
Wave Computing
深度学习芯片架构
DPU (Dataflow Processing Unit)
3轮融资共5900万美元
人工智能芯片技术
用于机器学习的第二代神经网络软件框架 CDNN2
纳斯达克上市,市值 9.12 亿美元
基于传统的ARM和其它移动处理器平台上的深度学习算法
可以嵌入移动设备的深度学习模块
寒武纪科技
中国首款神经网络处理器
1亿美元 A 轮融资
神深度学习 DPU 平台
深度学习DPU平台
A+轮约4000万美元融资
深度学习硬件、芯片
1030 万美元融资
深度学习硬件和软件开发
开源软件框架 Poplar 和「智能处理器」IPU
A轮融资 3000 万美元
本榜单中机器人领域的公司涵盖了中国、美国、日本、瑞士、英国、丹麦和德国等七个新老工业国家。在这个分类中,除了大型的工业级机器人,在医疗、无人机和家庭服务机器人等领域也都诞生了一批有着成熟产品和应用场景的公司,例如 Cyberdyne、3D Robotics 和 iRobot 。在静态环境中,机器人导航在很大程度上被解决了。目前的努力是在考虑如何训练机器人以泛型的、预测性的方式与周围世界进行交互。深度学习对机器人的影响也刚刚开始。
市值/估值/融资额
ABB Robotics
机器人及自动化技术
工业机器人、智能设备
468.95亿美元市值
机器人及自动化技术
工业机器人
4.4兆日元市值
KUKA Robotics
机器人及自动化技术
工业机器人
美的272亿美元拿下库卡94.55%的股份
Rethink Robotics
机器人、人机交互
智能机器人
1800万美元新一轮融资
Universal Robots
机器人及自动化技术
工业机器人
3D Robotics
计算机视觉、机器人技术
无人机,软件服务
五轮融资超 1 亿 2 千 600 万美元
可穿戴设备
医疗助理机器人
2083.56 亿日元市值
计算机视觉、机器人技术
电子产品,家用机器人
27亿美元市值
ReWalk Robotics
计算机视觉、机器人技术
代步机器人,残障专用智能设备
2000万美元市值
智能机器,自动视觉定位及室内地图构建
清洁机器人
新松机器人
机器人及自动化技术
工业机器人和行业解决方案
约 289 亿市值
埃夫特机器人
工业机器人、智能装备和行业解决方案
计算机视觉、无人机控制、环境及障碍感知、视觉跟随、自动寻路
无人机航拍和图像传输
估值约100亿美元
Embodied Intelligence
可以接入机器人的智能模块,工厂、仓库等自动化技术
种子轮 700 万美元融资
对人工智能而言,医疗领域一直被视为一个很有前景的应用领域。目前有许多依托深度学习和成像技术的人工智能创业公司,之如来自美国的基于深度学习的癌症检查公司 Enlitic 。此外,来自美国的人工智能医疗平台 CloudMedX ,以及将两大学科人工智能和基因结合起来的 Deep Genomics 。未来几年,基于人工智能的应用将能够改善数百万人的健康状况和生活质量。
市值/估值/融资额
深度学习系统生成医疗图像
深度学习分析系统Arterys System
1200万美元A轮融资
深度学习、大数据、图像检测
癌症检测系统
三轮融资 1500 万美元
VoxelCloud(体素科技)
医疗影像分析云服务
千万美金 A 轮融资
Insilico Medicine
深度学习和大数据
1000万美元最新融资
Oncora Medical
大数据和机器学习技术
通过数据分析为放射肿瘤学家提供临床决策支持,用于个性化医疗
两轮融资 132 万美元
种子轮 630 万美元
通过药物研发平台DUMA(TM)来评估大型公共和私有数据集,以迅速识别药物,并对药物和疾病的匹配度按照概率进行排序
种子轮 340 万美元
Berg Health
Interrogative Biology(R) 平台结合病人生物学和人工智能分析来进行药物发现、开发和诊断等
机器学习、自然语言处理
拥有MedxExchange 、MedxInsights 和MedxCare三款服务产品的医疗人工智能平台,提供数据、医疗洞见和健康管理服务
融资 660 万美元
Deep Genomics
深度学习、基因生物学
种子轮 370 万美元
大数据、人工智能
通过数据挖掘和机器分析提供个人性健康指数分析和预测
A轮融资近10亿人民币
由于较高的数据质量和明确的需求,金融称为人工智能最有前途的应用之一。数据分析公司 Kensho 在入侵华尔街,取代了分析师的部分工作。也出现了使用机器学习进行信用服务的 ZestFinance 和 Aire 。同时,传统金融巨头高盛也俨然变成了一家科技公司,推出基于机器学习的「AppBank」,拥有的工程师数量也接近大科技公司。
市值/估值/融资额
Context Relevant
数据挖掘、预测分析
本地分析软件和云服务
五轮融资 4430 万美元
Kensho Technologies
机器学习、自然语言处理、数据挖掘
金融分析辅助决策系统
B 轮融资 5000 万美元(2017 年 2 月)
Zest Finance
数据挖掘、机器学习
四轮共 1.12 亿美元
金融产品的信用评级
四轮共 700 万美元
数据挖掘、机器学习
AppBank、金融业务自动化
市值 867.10 亿美元
人工智能、数据挖掘
智能助理、信用评级和风险管理等应用
估值约 600 亿美元
人工智能、数据挖掘
目前掌管至少 260 亿美元资产
美国平均每?辆车上装有 70 个传感器,汽车将逐渐取代人类成为更好的司机,交通交由自动驾驶汽车接管,实现人与货物的实时接取和运送。这将彻底改变城市运行机制和居民生活。本榜单中自动驾驶类的公司来自美国、以色列和新加坡三个国家。除了以 Tesla 和 Drive.ai 为代表的美国公司,以色列的 Mobileye、Innoviz Technologies 以及新加坡的 nuTonomy 也分别在自动驾驶技术的视觉算法和安全系统上有着值得关注的应用。
市值/估值/融资额
自动驾驶汽车
谷歌无人驾驶项目开始以独立公司的身份运营
498.35 亿美元市值
自动驾驶汽车
5000 万美元B轮融资
新加坡/美国
3D自动驾驶技术
城市自动驾驶的算法和软件
2轮融资公1960万美元
Innoviz Technologies
智能3D传感、传感器融合和精准地图和定位等核心自动驾驶技术
物美价廉的高清晰度固态激光雷达
A 轮 900 万美元融资
雷达和专用短程通信安全系统
自动驾驶卡车
最新一轮6000万美元融资(2017 年 4 月)
SmartDrive
计算机视觉、数据挖掘
交通安全和表现的智能解决方案
六轮融资 1.8亿 美元
全自动驾驶
全新的自动驾驶汽车
3 轮融资共 2.9 亿美元
计算机视觉和深度学习
自动驾驶、图像识别SaaS服务
5500 万美金的 C 轮融资
计算机视觉、智能驾驶
辅助驾驶系统
A 轮数千万人民币
人工智能和自动驾驶技术
自动驾驶汽车
福特将持续注资 10 亿美元
在垂直应用领域,我们可以看到 Uber、Airbnb 在交通路径优化和定价的人工智能应用,也有Salesforce、Slack、Sentient Technologies 将机器学习用于企业服务的经典案例。此外,在农业、法律领域的的代表公司 Planet Labs 和 ROSS Intelligence 也十分值得关注。
市值/估值/融资额
利用机器学习和独家算法来检测和响应以前未识别的网络威胁
Darktrace 的核心产品为「企业免疫系统」(EIS)
A、B、C三轮共融资1.045亿美元
自动驾驶、机器学习、数据挖掘
自动驾驶汽车、智能交通和智能出行应用
12 轮融资 87.1 亿美元,估值 660 亿美元
开源 AeroSolve机器学习框架、智能助手、智能推荐、定价
9 轮融资 20 亿 9 千万美元
云计算、深度学习、数据处理
CRM 解决方案
市值约 638.37 亿美元
企业通讯应用,bots平台
总融资 5.4 亿美元,估值约 38 亿美元
人工智能、大规模分布式计算
解决复杂商业问题的综合智能系统
1.03 亿美元 C 轮融资,三轮共 1.3578 亿美元
基于社交网络的数据分析服务
1.3 亿美元 D 轮融资。五轮共 1.83 亿美元
认知计算、深度学习、自然语言处理
法务研究智能辅助工具
自动驾驶、机器学习、数据挖掘
自动驾驶汽车、智能交通和智能出行应用
超55亿美元新一轮融资 (2017 年 4 月)
深度学习、自然语言处理、图像识别
媒体产品的应用
估值约 120 亿美元
基于云端的深度神经网络算法、图像、语音、自然语言理解和运动控制、技术集成
智能机器解决方案
A+ 轮数千万美元
机器学习、数据科学
使用人工智能来预防网络攻击
已融资 1.77 亿美元
利用人工智能/机器学习来开发网络安全应用的公司
4 轮共 5360 万美元融资
机器学习、人工智能、数据分析
使用机器学习和人工智能技术来分析预测网络安全漏洞与系统故障
新一轮3250万美元融资
这是一份令人激动的名单,有的公司在做机器学习平台,有的是挑战前沿问题的研究。DeepMind 在被收购后依然在进行独立研究和运营。神秘的 Vicarious 还是持续研究「下一代人工智能算法」,日本创业公司 Preferred Networks 则利用深度学习让机械臂有了学习能力。
市值/估值/融资额
人工智能基础研究
AlphaGo、医疗健康、谷歌内部产品应用。
以4亿英镑(约5.32亿美元)被谷歌收购
人工智能基础研究
新的计算机视觉系统,机器人视觉
五轮融资 7200 万美元
Inkling 脚本语言和集成开发环境Mastermind
760 万美元A轮融资
深度学习操作系统Chainer,机器学习在物联网的应用
三轮融资 1730 万美元
深度学习企业应用包SKIL、开源框架Deeplearning4j
种子轮融资 300 万美元
开源机器学习平台和商业化支持
四轮融资 3360 万美元
数据挖掘、机器学习
为铁路、建筑等大行业提供数据预测分析SaaS服务
B轮融资5000万美元(2017 年 4 月)
为数据科学家提供图像、文本的识别和分析的工具
4轮融资共 438 万美元
金融应用和「先知」平台
A 轮融资数百万美元
Bayesian Program Synthesis 可以自行编写代码,用最优的方法解释收集到的数据
来自DARPA的770万美元投资、来自Felicis Ventures 的 450 万美元种子轮融资
机器学习平台公司,DataRobot平台上有数百个开源机器学习算法
5400 万美元 C 轮融资
机器学习与人工智能平台
PetuumOS、Poseidon 框架、Petuum Healthcare Solutions
9300万美元B轮融资
类似于苹果 App Store 的「算法应用」商店
1050 万美元 A 轮融资
科技巨头间的竞争异常激烈,从基础研究到开源平台,从计算资源再到产品升级。这关乎到下一代平台,开发者生态和用户。但与此同时,他们也承担着更大的责任,不久前,亚马逊、谷歌、 Facebook、IBM 和微软前所未有的走在一起,共同成立一家非营利组织,致力于推进公众对人工智能技术的理解,针对当前该领域的挑战和机遇执行可行方案。
市值/估值/融资额
人工智能综合研究
TensorFlow等开源框架,Google Photos、Now、Inbox和搜索等多项产品和服务、硬件
市值 6701 亿美元
人工智能综合研究
多个开源框架和硬件平台,Messenger、社交网络和定向广告等多项产品和服务
市值 4296 亿美元
人工智能综合研究
云服务、Echo等智能家居、机器人、电商产品应用
市值 4696 亿美元
人工智能综合研究
CNTK等开源框架,Cortana、小冰等多项产业和服务,硬件
市值 5362 亿美元
人工智能综合研究
Watson、行业认知计算解决方案、量子计算机等
市值 1434 亿美元
人工智能综合研究
基于智能手机等硬件的多项产品和硬件、智能助手、智能家居、医疗等
市值 8067 亿美元
人工智能综合研究
开源框架PaddlePaddle、百度大脑、自动驾驶、互联网应用
市值 676 亿美元
人工智能综合研究
云服务、人工智能平台 DT PAI、电商产品应用
市值 3079 亿美元
人工智能综合研究
互联网应用
市值 25683.98亿人名币
人工智能硬件
GPU、深度学习超级计算机DGX-1、自动驾驶超级计算机Xavier
市值 832.07 亿美元
人工智能硬件
CPU、Xeon Phi、Nervana
市值 1706.30 亿美元
人工智能硬件
移动智能设备芯片
市值约 899.36 亿美元
全可编程技术和器件
All Programmable FPGA、SoC和3D IC提供商
市值约 160.70 亿美元
人工智能综合研究、硬件
人机交互设备应用、芯片等
2017 年以 785.108 亿美元营业收入首次打入《财富》前百强
自然语言处理
自然语言理解的基础研究、智能设备的自然交互应用
语音技术和自然语言处理
智能手表和车载智能语音应用
CureMetrix
基于影像分析的乳腺癌和肺癌检测
语音识别、计算机视觉
Rokid、Pebble 智能机器人
计算机视觉、智能驾驶
汽车工业的计算机视觉算法和驾驶辅助系统的芯片技术的研究
神经网络处理器 NPU 及解决方案
Kneron 可以提供终端的 NPU,并组建软件、硬件、云服务和端协同的整套 NPU 解决方案
自然语言处理
聊天机器人平台ChatFlow
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
关于Jeff Dean: ,简单来说,这货是Google牛逼的源泉之一。因为此人实在太牛了,于是出现了关于他有多牛的几个笑话,直接笑翻,和大家共享下。
During his own Google interview, Jeff Dean was asked the
implications if P=NP were true.
He said, “P = 0 or N = 1.” Then, before
the interviewer had even finished laughing, Jeff examined Google’s
public certificate and wrote the private key on the whiteboard.
当他被Google面试时,Jeff Dean被问及如果P=NP意味着什么。他说,“P=0 或者 N=1”。然后,在所有的面试官还没笑完之前,Jeff瞄了一眼Google的公共证书然后在白板上写上了对应的私钥。
Compilers don’t warn Jeff Dean.
Jeff Dean warns compilers.
编译器从来不给Jeff编译警告,而是Jeff警告编译器
The rate at which Jeff Dean produces code jumped by a factor of 40
in late 2000 when he upgraded his keyboard to USB 2.0.
在2000年后段,Jeff码代码的速度突然激增了40倍,原因是他把自己的键盘升级到了USB 2.0
Jeff Dean builds his code before committing it, but only to check for compiler and linker bugs.
Jeff还是会在提交代码前把它们编译一遍,不过这么做的目的只是为了检查下编译器和链接器有没有bug
All pointers point to Jeff Dean.
所有指针都是指向Jeff的
gcc -O4 emails your code to Jeff Dean for a rewrite.
gcc的-O4优化选项是将你的代码邮件给Jeff重写一下
The speed of light in a vacuum used to be about 35 mph. Then Jeff Dean spent a weekend optimizing physics.
光在真空中的速度曾近是35英里每小时,后来Jeff花了一个周末对物理学进行了小小的优化
Jeff Dean was born on December 31, 1969 at 11:48 PM. It took him twelve minutes to implement his first time counter.
Jeff出生于日的下午11点48分,然后他花了整整12分钟的时间实现了他的第一个计时器。(背景:计算机中的计时器数值通常被设计为从日0点0分0秒到当前为止的秒数)
When Jeff Dean sends an ethernet frame there are no collisions because the competing frames retreat back up into the buffer memory on their source nic.
当Jeff向以太网发送一个数据包时从来不会有冲突,原因是本来要和它有冲突的包都默默撤回了缓冲区
Unsatisfied with constant time, Jeff Dean created the world’s first O(1/n)algorithm.
Jeff对常量的时间复杂度并不满足,于是他创造了世界上第一个O(1/n)的算法。(即随着问题规模的增大,其解决问题所花的时间会越短)
Jeff Dean was forced to invent asynchronous APIs one day when he optimized a function so that it returned before it was invoked.
Jeff曾被迫发明了异步API,原因是经他优化后的某个函数会在调用开始前返回
When Jeff Dean designs software, he first codes the binary and then writes the source as documentation.
当Jeff写软件时,他是直接码机器码的。写源代码只是为了作为文档使用。
Jeff Dean wrote an O(n^2) algorithm once. It was for the Traveling Salesman Problem.
Jeff曾无奈写过一次O(n^2)的算法,其解决的问题是旅行商问题。(该问题是NPC的,即计算机中最复杂最难解决的一类问题,许多人相信这些问题是没有多项式时间复杂度的解的)
Jeff Dean can beat you at connect four. In three moves.
Jeff在四子连珠的游戏中能赢你,在三步内
When your code has undefined behavior, you get a seg fault and corrupted data. When Jeff Dean’s code has undefined behavior, a unicorn rides in on a rainbow and gives everybody free ice cream.
当你的代码有不确定行为时,你通常得到一个段错误或者不正确的数据。当Jeff的代码有不确定行为时,孙悟空会驾着七彩云朵给每个人发免费的长寿仙桃
When Jeff Dean fires up the profiler, loops unroll themselves in fear.
当Jeff触发程序的程序性能采样时,循环会因害怕而自动展开。
Jeff Dean is still waiting for mathematicians to discover the joke he hid in the digits of PI.
Jeff依然孤独地等待着数学家们解开他在PI的数字中隐藏的笑话
Jeff Dean’s keyboard has two keys: 1 and 0.
Jeff的键盘多达两个键:1和0
When Jeff has trouble sleeping, he Mapreduces sheep.
当Jeff失眠时,他Mapreduce羊群。(Mapreduce是Jeff的作品之一,这个分布式处理的框架算法是Google立足的根本之一)
When Jeff Dean listens to mp3s, he just cats them to /dev/dsp and does the decoding in his head.
当Jeff听MP3时,他查看其中的二进制内容然后在他脑子里进行音频解码。
When Graham Bell invented the telephone, he saw a missed call from Jeff Dean.
当贝爷在沙漠中逮到一个手机时,他发现手机里有个Jeff的未接来电。
当贝尔发明电话后,他发现电话里有个Jeff的未接来电。
Jeff Dean’s watch displays seconds since January 1st, 1970. He is never late.
Jeff的手表显示的数字是自日0点0分0秒以来的秒数,他因此从来不迟到。
Jeff starts his programming sessions with ‘cat & /dev/mem’.
Jeff在开始编程之前,会做’cat & /dev/mem’。(即把输入的内容直接导到内存中)
One day Jeff Dean grabbed his Etch-a-Sketch instead of his laptop on his way out the door. On his way back home to get his real laptop, he programmed the Etch-a-Sketch to play Tetris.
有一次Jeff出门时错将草图画板当笔记本拿了。结果在他回家取笔记本的路上,他对画板进行了重编程以在其上玩俄罗斯方块
Google search went down for a few hours in 2002, and Jeff Dean started handling queries by hand. Search Quality doubled.
在2002年,Google搜索曾挂了几个小时,于是Jeff站出来手动处理用户的查询请求。搜索准确度翻了番
The x86-64 spec includes several undocumented instructions marked ‘private use’. They are actually for Jeff Dean’s use.
x86-64指令集中有一些没有被记入到文档的‘私用’指令。事实上,他们是给Jeff用的
mantri@mantri-laptop~rm-r/rm:cannotremoverootdirectory‘/′mantri@mantri-laptop& su - jeffdean -c “rm -r /”
I am extremely sorry. Removing root directory…
//rm -r是Linux系统中删除根目录所有文件的命令,这是不可能执行的(如同在win系统中不允许格式化c盘一样),su命令是在低权限账户操作Linux系统时想执行高权限命令时使用的。
Jeff Dean once shifted a bit so hard, it ended up on another computer.
有次Jeff移位移得太恨了,结果那一位跑到另一台计算机上去了
Jeff Dean has gone to /dev/null and come back.
Jeff从/dev/null那涅槃了。(庞统啊~)
Jeff又从/dev/null那涅槃了。(擦!)
Jeff Dean sorts his phone contacts by their vcard’s md5 checksums.
Jeff通讯录的排序规则是按照联系人的md5值
Jeff Dean doesn’t kill processes, he slays them.
Jeff他不杀进程,他肢解虐杀它们
The needle in haystack found Jeff Dean
海底的针会自己找上Jeff
All of the Google App Engine is actually hosted from Jeff Dean’s Nexus S
Google App Engine的服务器实际上是Jeff的Nexus S
Jeff Deans’s keyboard doesn’t have a Ctrl key because nothing controls Jeff Dean.
Jeff的键盘压根就没有Ctrl(控制)键,因为没有什么东西能控制Jeff
You name three pointers, Einstein, Euler, and Turing, when you de-reference them, all you get is Jeff Dean.
如果你命名三个指针分别为爱因斯坦、欧拉和图灵,当你查看它们的指向时,你看到的都会是Jeff
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
登录网站时必须输入的图片验证码可以用来识别访问者到底是人还是机器——这同时也是某种程度上的「图灵测试」,人工智能研究者们寻求破解的方向,让计算机学会破解验证码,我们就距离通用智能更近了一步。今天,破解全世界最为流行的图片验证码需要多久?仅需 15 分钟。
每个人都讨厌 CAPTCHA——这些恼人的图片中包含你必须输入的文字,正确地填写它你才能访问网站。CAPTCHA 全称「全自动区分计算机和人类的公开图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart)」,旨在确认访问者是真正的人类,防止恶意程序的入侵。然而,随着深度学习和计算机视觉技术的发展,现在这些认证方法可以被我们轻松破解了。
最近, Adrian RoseBrock 撰写的《Deep Learning for Computer Vision with Python》。在这本书中,Adrian 利用机器学习破解了 E-ZPass New York 网站上的 CAPTCHA 验证码:
在这里,Adrian 没有接入生成 CAPTCHA 图片应用源代码的权限。为了破解这样的系统,我们必须找到数百张示例图片,然后训练机器学习模型来破解它。
但是如果我们想要破解开源的 CAPTCHA 系统——在这里我们拥有所有源代码的访问权,事情又会如何呢?
通过访问 插件登记网站,在其中搜索「CAPTCHA」。结果中显示的第一个内容是「Really Simple CAPTCHA」,已经拥有超过 100 万次活跃安装了:
重点在于,这里有它的源代码!有了生成 CAPTCHA 图片的源代码,我们就可以轻松破解验证码了。在这里,为了让任务更具挑战性,我们先给自己添加一点限制:我们能不能在 15 分钟内破解它?Let’s try it!
Note:这并不意味着我们在批评「Really Simple CAPTCHA」插件及其作者。目前,插件的作者已表示该款验证码已经不再安全,并推荐用户寻找其他更加具有安全性的认证方式。但如果你真的是这 100 万用户中的一员,或许你应该有所防备了:)
首先,我们需要做好计划,让我们看看 Really Simple CAPTCHA 生成的图片是什么样子。在 Demo 站中,我们看到了这样的情景:
一个 CAPTCHA 图片范例
看起来它会生成由四个字符组成的图片。让我们在这个插件的 PHP 源代码里面确认一下:
public function __construct() {
$this-&chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ';
$this-&char_length = 4;
$this-&fonts = array(
dirname( __FILE__ ) . '/gentium/GenBkBasR.ttf',
dirname( __FILE__ ) . '/gentium/GenBkBasI.ttf',
dirname( __FILE__ ) . '/gentium/GenBkBasBI.ttf',
dirname( __FILE__ ) . '/gentium/GenBkBasB.ttf',
没错,它会生成四个字母/数字组成的 CAPTCHA 验证码,每个字符的字体各不相同,在代码中我们也可以看出验证码中不会包含「O」或者「I」,因为这两个字母很可能会让人与数字产生混淆。所以,我们共有 32 个数字或字母需要识别。没问题!
至此用时:2 分钟
我们需要的工具
在开始破解之前,我们先要介绍一下行动所需的工具:
Python 是目前人工智能领域中最为流行的编程语言,包含多种机器学习和计算机视觉库。
OpenCV 是计算机视觉和图像处理任务上的流行框架。在这里,我们需要使用 OpenCV 来处理 CAPTCHA 生成的图像,OpenCV 拥有 Python API,所以我们可以直接使用 Python 调用它。
Keras 是一个使用 Python 编写的深度学习框架。他可以让我们更加轻松地定义、训练和使用深度神经网络——仅需编写很少的代码。
TensorFlow
TensorFlow 是谷歌推出与维护的机器学习库,也是目前人工智能领域里最为流行的框架。我们会在 Keras 之上写代码,但 Keras 实际上并没有实现神经网络运算的方法——它需要使用 TensorFlow 作为后端来完成具体的工作。
好了,让我们回到挑战之中。
创立数据集
想要训练任何机器学习系统,我们都需要相应的数据集。为了破解 CAPTCHA 验证码系统,我们需要这样的训练数据:
看起来少不了大量的标注工作。不过在这里我们有了 WordPress 插件的源代码,我们可以稍稍修改插件,让它自动输出 10,000 个 CAPTCHA 图片,以及相应的正确答案。
在对源代码的几分钟破解之后(只要简单地加个『for』循环),我们就拥有了一个内含 10,000 张 PNG 图片的训练集,而图片的正确答案就是每张图片的文件名:
Note:在这部分我不会给你示例代码。因为本文面向教学,希望各位不会真的去破解各家 WordPress 网站。不过这里我会给你 10,000 张生成的图片让大家用于复现。
至此用时:5 分钟
现在我们已经有了训练数据,我们可以直接用它来训练一个简单的神经网络:
因为有了足够的数据,这种方法将能很好地工作,但我们可以使问题变得更简单。因为问题越简单、训练数据越少,我们解决问题所需要的计算力就越少,毕竟我们总共只有 15 分钟的时间。
幸运的是,一个 CAPTCHA 图像由四个符合组成,因此我们可以以某种方式将图像分割开以令每张图像只有一个符号。这样的话我们只需训练神经网络识别单个字符就行了。
我们并不能手动地用 Photoshop 等图像软件将它们分割开,因为训练图像总共有 1 万张。此外,我们也不能将图像切分为四个等大小的图像块,因为 CAPTCHA 会随机地将这些不同的字符放置在不同的水平线上,如下所示:
幸运的是,我们能使用已有的方法自动完成这一部分。在图像处理中,我们经常需要检测有相同色彩的像素块,这些连续像素块的边界可以称之为轮廓。而 OpenCV 有一个内置的 findContours() 函数可以检测这些轮廓的区域。
所以我们原始的 CAPTCHA 图像为如下所示:
然后我们将该图像转换为纯净的黑白像素点(即采用色彩阈值的方法),因此我们将很容易寻找到连续的轮廓边界:
下面我们使用 OpenCV 的 findContours() 函数以检测包含连续相同像素块的分离部分:
随后将每个区域保存为一个单独的图像文件就非常简单了,而且我们也知道每张图像从左到右有四个字符,因此我们可以在保存的时候使用这种知识标注各个字符。我们只需要按顺序保存它们,并将每一张图像保存为对应的字符名。
但是还有一个问题,有些 CAPTCHA 图像包含重叠的字符:
这就意味着我们很可能会将两个字符抽取为一个分割区域:
如果我们不解决这个问题,那么我们最后就会创建一个非常糟糕的训练集。我们需要解决这个问题,以免模型会将两个重叠的字符识别为一个。
这里有一个简单的解决方案,如果字符轮廓的宽要比高长一些,那么很有可能这一个切分内就包含了两个字符。因此我们可以将这种连体的字符拆分为两半,并将它们视为单独的字符。
我们将宽度大于高度一定数值的图像拆分为两个数值,虽然这种方法非常简单,但在 CAPTCHA 上却十分有效。
现在我们有方法抽取独立的字符,因此我们需要将所有的 CAPTCHA 图像都执行这种处理。我们的目标是收集每个字符的不同变体,并将单个字符的所有变体保留在一个文件夹中。
上图展示了字符「W」的抽取情况,我们最后从 1 万张 CAPTCHA 图像中获取了 1147 张不同的「W」。
处理完这些图像后,我们总共大约花了 10 分钟。
构建并训练神经网络
因为我们一次只需要识别单个字符,所以并不需要一个复杂的神经网络架构,且识别这种字母与数字的任务要比其它识别复杂图像的任务简单地多。因此我们使用了一个简单的卷积神经网络,它一共包含两个卷积层与两个全连接层。
如果我们使用的是 Keras,那么只需要几行代码就能构建一个神经网络架构:
model = Sequential()
model.add(Conv2D(20, (5, 5), padding="same", input_shape=(20, 20, 1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(50, (5, 5), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(500, activation="relu"))
model.add(Dense(32, activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
现在开始训练
model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=32, epochs=10, verbose=1)
在经过 10 个 Epoch 的训练后,我们的训练准确度可以到达 100%,因此我们就能终止程序以完成整个模型的训练。所以最后我们一共花了 15 分钟。
使用训练后的模型解决 CAPTCHA 识别问题
现在我们利用已训练的神经网络可以轻松识别 CAPTCHA 验证码:
在网站上使用 WordPress 插件获取真正的 CAPTCHA 验证码;
将 CAPTCHA 图像分割为四个独立的字符块,这里使用的方法和创建训练集的方法一样;
调用神经网络对这四个独立的字符块进行预测;
将四个预测结果排列以作为该 CAPTCHA 验证码的返回结果。
或者我们可以直接使用命令行运行:
Let’s try it together
如果你想自己试验一下,
这个压缩文件包中包含 10,000 张实例图片以及本文中涉及的每一步的代码。其中还有 README 文件告诉你如何运行它。
好书推荐:
Linux就该这么学
奔跑吧 Linux内核
TensorFlow实战
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
The M Tank 编辑了一份报告《A Year in Computer Vision》,记录了 2016 至 2017 年计算机视觉领域的研究成果,对开发者和研究人员来说是不可多得的一份详细材料。该材料共包括四大部分,本文只对其第一部分做了编译介绍,后续会放出其他部分内容(英语就四级水平,估计不会很快,见谅)。
超分辨率、风格迁移、着色
人体姿势估计
其他未分类 3D
不可分类的其他材料与有趣趋势
计算机视觉是关于研究机器视觉能力的学科,或者说是使机器能对环境和其中的刺激进行可视化分析的学科。机器视觉通常涉及对图像或视频的评估,英国机器视觉协会(BMVA)将机器视觉定义为「对单张图像或一系列图像的有用信息进行自动提取、分析和理解」。
对我们环境的真正理解不是仅通过视觉表征就可以达成的。更准确地说,是视觉线索通过视觉神经传输到主视觉皮层,然后由大脑以高度特征化的形式进行分析的过程。从这种感觉信息中提取解释几乎包含了我们所有的自然演化和主体经验,即进化如何令我们生存下来,以及我们如何在一生中对世界进行学习和理解。
从这方面来说,视觉过程仅仅是传输图像并进行解释的过程,然而从计算的角度看,图像其实更接近思想或认知,涉及大脑的大量功能。因此,由于跨领域特性很显著,很多人认为计算机视觉是对视觉环境和其中语境的真实理解,并将引领我们实现强人工智能。
不过,我们目前仍然处于这个领域发展的胚胎期。这篇文章的目的在于阐明 2016 至 2017 年计算机视觉最主要的进步,以及这些进步对实际应用的促进。
为简单起见,这篇文章将仅限于基本的定义,并会省略很多内容,特别是关于各种卷积神经网络的设计架构等方面。
这里推荐一些学习资料,其中前两个适用与初学者快速打好基础,后两个可以作为进阶学习:
Andrej Karpathy:「What a Deep Neural Network thinks about your#selfie」,这是理解 CNN 的应用和设计功能的最好文章 [4]。
Quora:「what is a convolutional neural network?」,解释清晰明了,尤其适合初学者 [5]。
CS231n: Convolutional Neural Networks for Visual
Recognition,斯坦福大学课程,是进阶学习的绝佳资源 [6]。
Deep Learning(Goodfellow,Bengio&Courville,2016),这本书在第 9 章提供了对 CNN的特征和架构设计等详尽解释,网上有免费资源 [7]。
对于还想进一步了解神经网络和深度学习的,推荐:
Neural Networks and Deep Learning(Nielsen,2017),这是一本免费在线书籍,可为读者提供对神经网络和深度学习的复杂性的直观理解。即使只阅读了第 1章也可以帮助初学者透彻地理解这篇文章。
下面我们先简介本文的第一部分,这一部分主要叙述了目标分类与定位、目标检测与目标追踪等十分基础与流行的计算机视觉任务。而后将陆续分享 Benjamin F. Duffy 和 Daniel R. Flynn 后面 3 部分对计算机视觉论述,包括第二部分的语义分割、超分辨率、风格迁移和动作识别,第三部分三维目标识别与重建、和第四部分卷积网络的架构与数据集等内容。
基础的计算机视觉任务
图像分类任务通常是指为整张图像分配特定的标签,如下左图整张图像的标签为 CAT。而定位是指找到识别目标在图像中出现的位置,通常这种位置信息将由对象周围的一些边界框表示出来。目前 ImageNet [9] 上的分类/定位的准确度已经超过了一组训练有素的人类 [10]。因此相对于前一部分的基础,我们会着重介绍后面如语义分割、3D 重建等内容。
图 1:计算机视觉任务,来源 cs231n 课程资料。
然而随着目标类别 [11] 的增加,引入大型数据集将为近期的研究进展提供新的度量标准。在这一方面,Keras [12] 创始人 Francois Chollet 将包括 Xception 等架构和新技术应用到谷歌内部的大型数据集中,该数据集包含 1.7 万个目标类别,共计 350M(Million)的多类别图像。
图 2:ILSVRC 竞赛中,分类/定位的逐年错误率,来源 Jia Deng (2016),ILSVRC2016。
ImageNet LSVRC(2016)亮点:
场景分类是指用「温室」、「体育场」和「大教堂」等特定场景对图像进行分类。ImageNet 去年举办了基于 Places2[15]子数据的场景分类挑战赛,该数据集有 365 个场景共计 8 百万 训练图像。海康威视 [16] 选择了深度类 Inception 的网络和并不太深的 ResNet,并利用它们的集成实现 9% 的 Top-5 误差率以赢得竞赛。
Trimps-Soushen 以 2.99% 的 Top-5 分类误差率和 7.71% 的定位误差率赢得了 ImageNet分类任务的胜利。该团队使用了分类模型的集成(即 Inception、Inception-ResNet、ResNet 和宽度残差网络模块[17] 的平均结果)和基于标注的定位模型 Faster R-CNN [18] 来完成任务。训练数据集有 1000 个类别共计 120万的图像数据,分割的测试集还包括训练未见过的 10 万张测试图像。
Facebook 的 ResNeXt 通过使用从原始 ResNet [19] 扩展出来的新架构而实现了 3.03% 的 Top-5分类误差率。
目标检测(Object Detection)即如字面所说的检测图像中包含的物体或目标。ILSVRC 2016 [20] 对目标检测的定义为输出单个物体或对象的边界框与标签。这与分类/定位任务不同,目标检测将分类和定位技术应用到一张图像的多个目标而不是一个主要的目标。
图 3:仅有人脸一个类别的目标检测。图为人脸检测的一个示例,作者表示目标识别的一个问题是小物体检测,检测图中较小的人脸有助于挖掘模型的尺度不变性、图像分辨率和情景推理的能力,来源 Hu and Ramanan (2016, p. 1)[21]。
目标识别领域在 2016 年主要的趋势之一是转向更快、更高效的检测系统。这一特性在 YOLO、SSD 和 R-FCN 方法上非常显著,它们都倾向于在整张图像上共享计算。因此可以将它们与 Fast/Faster R-CNN 等成本较高的子网络技术区分开开来,这些更快和高效的检测系统通常可以指代「端到端的训练或学习」。
这种共享计算的基本原理通常是避免将独立的算法聚焦在各自的子问题上,因为这样可以避免训练时长的增加和网络准确度的降低。也就是说这种端到端的适应性网络通常发生在子网络解决方案的初始之后,因此是一种可回溯的优化(retrospective optimisation)。然而,Fast/Faster R-CNN 技术仍然非常有效,仍然广泛用于目标检测任务。
SSD:Single Shot MultiBox Detector[22]利用封装了所有必要计算并消除了高成本通信的单一神经网络,以实现了 75.1% mAP 和超过 Faster R-CNN 模型的性能(Liu et al. 2016)。
我们在 2016 年看到最引人注目的系统是「YOLO9000: Better, Faster, Stronger」[23],它引入了YOLOv2 和 YOLO9000 检测系统 [24]。YOLOv2 很大程度上提升了 2015 年提出的 YOLO 模型 [25]性能,它能以非常高的 FPS(使用原版 GTX Titan X 在低分辨率图像上达到90FPS)实现更好的结果。除了完成的速度外,系统在特定目标检测数据集上准确度要优于带有 ReNet 和 SSD 的 Faster RCNN。
YOLO9000 实现了检测和分类的联合训练,并将其预测泛化能力扩展到未知的检测数据上,即它能检测从未见过的目标或物体。YOLO9000 模型提供了 9000 多个类别的实时目标检测,缩小了分类和检测数据集间的鸿沟。该模型其它详细的信息和预训练模型。
Feature Pyramid Networks for Object Detection [27] 是 FAIR [28] 实验室提出的,它能利用「深度卷积网络的内部多尺度、金字塔型的层级结构构建具有边际额外成本的特征金字塔」,这意味着表征能更强大和快速。Lin et al. (2016) 在 COCO[29] 数据集上实现了顶尖的单模型结果。若与基础的 Faster R-CNN 相结合,将超过2016 年最好的结果。
R-FCN:Object Detection via Region-based Fully Convolutional Networks[30],这是另一种在图像上避免应用数百次高成本的各区域子网络方法,它通过使基于区域的检测器在整张图像上进行全卷积和共享计算。「我们每张图像的测试时间只需要170ms,要比 Faster R-CNN 快 2.5 到 20 倍」(Dai et al., 2016)。
图 4:目标检测中的准确率权衡,来源 Huang et al. (2016, p. 9)[31]。
注意:Y 轴表示的是平均准确率(mAP),X 轴表示不同元架构(meta-architecture)的各种特征提取器(VGG、MobileNet…Inception ResNet V2)。此外,mAP small、medium 和 large 分别表示对小型、中型和大型目标的检测平均准确率。即准确率是按「目标尺寸、元架构和特征提取器」进行分层的,并且图像的分辨率固定为 300。虽然 Faster R-CNN 在上述样本中表现得更好,但是这并没有什么价值,因为该元架构相比 R-FCN 来说慢得多。
Huang et al. (2016)[32] 的论文提供了 R-FCN、SSD 和 Faster R-CNN 的深度性能对比。由于机器学习准确率对比中存在的问题,这里使用的是一种标准化的方法。这些架构被视为元架构,因为它们可以组合不同的特征提取器,比如 ResNet 或 Inception。
论文的作者通过改变元架构、特征提取器和图像分辨率研究准确率和速度之间的权衡。例如,对不同特征提取器的选择可以造成元架构对比的非常大的变化。
实时商业应用中需要低功耗和高效同时能保持准确率的目标检测方法,尤其是自动驾驶应用,SqueezeDet[33] 和 PVANet[34] 在论文中描述了这种发展趋势。
COCO[36] 是另一个常用的图像数据集。然而,它相对于 ImageNet 来说更小,更常被用作备选数据集。ImageNet 聚焦于目标识别,拥有情景理解的更广泛的语境。组织者主办了一场包括目标检测、分割和关键点标注的年度挑战赛。在 ILSVRC[37] 和 COCO[38] 上进行的目标检测挑战赛的结果如下:
ImageNet LSVRC 图像目标检测(DET):CUImage 66% 平均准确率,在 200 个类别中有 109 个胜出。
ImageNet LSVRC 视频目标检测(VID):NUIST 80.8% 平均准确率。
ImageNet LSVRC 视频追踪目标检测:CUvideo 55.8% 平均准确率。
COCO 2016 目标检测挑战赛(边界框):G-RMI(谷歌)41.5% 平均准确率(比 2015 的胜者 MSRAVC 高出 4.2%绝对百分点)。
从以上结果可以看出,在 ImageNet 上的结果表明「MSRAVC 2015 的结果为『引入 ResNet』设置了很高的标准。在整个项目中对所有的类别的目标检测性能都有所提升。在两个挑战赛中,定位任务的性能都得到较大的提升。关于小型目标实例的大幅性能提升结果详见参考文献」(ImageNet,2016)。[39]
图 5.ILSVRC 的图像目标检测结果(),来源 ImageNet. 2016. [Online] Workshop
目标追踪即在给定的场景中追踪感兴趣的一个或多个特定目标的过程,在视频和现实世界的交互中(通常是从追踪初始的目标检测开始的)有很多应用,且对于自动驾驶而言非常重要。
Fully-Convolutional Siamese Networks for Object Tracking[40],将一个连体网络(Siamese network)结合一个基础的追踪算法,使用端到端的训练方法,达到了当前最佳,图框显示率超过了实时应用的需求。这篇论文利用传统在线学习方法构建追踪模型。
Learning to Track at 100 FPS with Deep Regression
Networks[41],该论文试图改善在线训练方法中存在的缺陷。他们构建了一个使用前馈网络学习目标运动、外观和方向中的普遍关系的追踪器,从而可以在没有在线训练的情况下有效地追踪到新的目标。该算法在一个标准的追踪基准测试中达到了当前最佳,同时可以100FPS 的帧数追踪所有的目标(Held et al.,2016)。
Deep Motion Features for Visual Tracking[43] 结合了手工设计的特征、深度外观特征(利用 CNN)和深度运动特征(在光流图像上训练),并取得了当前最佳的结果。虽然深度运动特征在动作识别和视频分类中很常见,但作者声称这是其首次被应用于视觉追踪上。该论文获得了 ICPR2016 的「计算机视觉和机器人视觉」的最佳论文。
「本论文展示了深度运动特征(motion features)对检测和追踪框架的影响。我们还进一步说明了手工制作的特征、深度 RGB 和深度运用特征包含互补信息。据我们所知,这是第一个提出融合外表信息和深度运动特征,并用于视觉追踪的研究。我们全面的实验表明融合方法具有深度运动特征,并超过了单纯依赖外表信息的方法。」
Virtual Worlds as Proxy for Multi-Object Tracking Analysis [44]方法解决了现有虚拟世界中缺乏真实可变性视频追踪基准和数据集。该论文提出了一种新的真实世界复制方法,该方法从头开始生成丰富、虚拟、合成和照片逼真的环境。此外,该方法还能克服现有数据集中存在的一些内容匮乏问题。生成的图像能自动通过正确的真值进行标注,并允许应用于除目标检测/追踪外其它如光流等任务。
Globally Optimal Object Tracking with Fully Convolutional Networks[45]专注处理目标变化和遮挡,并将它们作为目标追踪的两个根本限制。「我们提出的方法通过使用全卷积网络解决物体或目标外表的变化,还通过动态规划的方法解决遮挡情况」(Lee et al., 2016)。
参考文献:
[1] British Machine Vision Association (BMVA). 2016. What is computer vision? [Online] Available at:
[Accessed 21/12/2016]
[2] Krizhevsky, A., Sutskever, I. and Hinton, G. E. 2012. ImageNet Classification with Deep Convolutional Neural Networks, NIPS 2012: Neural Information Processing Systems, Lake Tahoe, Nevada. Available:
[3] Kuhn, T. S. 1962. The Structure of Scientific Revolutions. 4th ed. United States: The University of Chicago Press.
[4] Karpathy, A. 2015. What a Deep Neural Network thinks about your #selfie. [Blog] Andrej Karpathy Blog. Available:
[Accessed: 21/12/2016]
[5] Quora. 2016. What is a convolutional neural network? [Online] Available:
[Accessed: 21/12/2016]
[6] Stanford University. 2016. Convolutional Neural Networks for Visual Recognition. [Online] CS231n. Available:
[Accessed 21/12/2016]
[7] Goodfellow et al. 2016. Deep Learning. MIT Press. [Online]
[Accessed: 21/12/2016] Note: Chapter 9, Convolutional Networks [Available:
[8] Nielsen, M. 2017. Neural Networks and Deep Learning. [Online] EBook. Available:
[Accessed: 06/03/2017].
[9] ImageNet refers to a popular image dataset for Computer Vision. Each year entrants compete in a series of different tasks called the ImageNet Large Scale Visual Recognition Challenge (ILSVRC). Available:
[10] See「What I learned from competing against a ConvNet on ImageNet」by Andrej Karpathy. The blog post details the author』s journey to provide a human benchmark against the ILSVRC 2014 dataset. The error rate was approximately 5.1% versus a then state-of-the-art GoogLeNet classification error of 6.8%. Available:
[11] See new datasets later in this piece.
[12] Keras is a popular neural network-based deep learning library:
[13] Chollet, F. 2016. Information-theoretical label embeddings for large-scale image classification. [Online] arXiv: . Available: arXiv:v1
[14] Chollet, F. 2016. Xception: Deep Learning with Depthwise Separable Convolutions. [Online] arXiv:. Available: arXiv:v2
[15] Places2 dataset, details available: . See also new datasets section.
[16] Hikvision. 2016. Hikvision ranked No.1 in Scene Classification at ImageNet 2016 challenge. [Online] Security News Desk. Available:
[Accessed: 20/03/2017].
[17] See Residual Networks in Part Four of this publication for more details.
[18] Details available under team information Trimps-Soushen from:
[19] Xie, S., Girshick, R., Dollar, P., Tu, Z. & He, K. 2016. Aggregated Residual Transformations for Deep Neural Networks. [Online] arXiv: . Available: arXiv:v1
[20] ImageNet Large Scale Visual Recognition Challenge (2016), Part II, Available:
[Accessed: 22/11/2016]
[21] Hu and Ramanan. 2016. Finding Tiny Faces. [Online] arXiv: . Available: arXiv:v1
[22] Liu et al. 2016. SSD: Single Shot MultiBox Detector. [Online] arXiv: v5. Available: arXiv:v5
[23] Redmon, J. Farhadi, A. 2016. YOLO9000: Better, Faster, Stronger. [Online] arXiv: v1. Available: arXiv:v1
[24] YOLO stands for「You Only Look Once」.
[25] Redmon et al. 2016. You Only Look Once: Unified, Real-Time Object Detection. [Online] arXiv: . Available: arXiv:v5
[26]Redmon. 2017. YOLO: Real-Time Object Detection. [Website] pjreddie.com. Available:
[Accessed: 01/03/2017].
[27] Lin et al. 2016. Feature Pyramid Networks for Object Detection. [Online] arXiv: . Available: arXiv:v1
[28] Facebook’s Artificial Intelligence Research
[29] Common Objects in Context (COCO) image dataset
[30] Dai et al. 2016. R-FCN: Object Detection via Region-based Fully Convolutional Networks. [Online] arXiv: . Available: arXiv:v2
[31] Huang et al. 2016. Speed/accuracy trade-offs for modern convolutional object detectors. [Online] arXiv: . Available: arXiv:v1
[33] Wu et al. 2016. SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving. [Online] arXiv: . Available: arXiv:v2
[34] Hong et al. 2016. PVANet: Lightweight Deep Neural Networks for Real-time Object Detection. [Online] arXiv: v2. Available: arXiv:v2
[35] DeepGlint Official. 2016. DeepGlint CVPR2016. [Online] Youtube.com. Available:
[Accessed: 01/03/2017].
[36] COCO - Common Objects in Common. 2016. [Website] Available:
[Accessed: 04/01/2017].
[37] ILSRVC results taken from: ImageNet. 2016. Large Scale Visual Recognition Challenge 2016.
[Website] Object Detection. Available:
[Accessed: 04/01/2017].
[38] COCO Detection Challenge results taken from: COCO - Common Objects in Common. 2016. Detections Leaderboard [Website] mscoco.org. Available:
[Accessed: 05/01/2017].
[39] ImageNet. 2016. [Online] Workshop Presentation, Slide 31. Available:
[Accessed: 06/01/2017].
[40] Bertinetto et al. 2016. Fully-Convolutional Siamese Networks for Object Tracking. [Online] arXiv: . Available:
[41] Held et al. 2016. Learning to Track at 100 FPS with Deep Regression Networks. [Online] arXiv: . Available:
[42] David Held. 2016. GOTURN - a neural network tracker. [Online] YouTube.com. Available:
[Accessed: 03/03/2017].
[43] Gladh et al. 2016. Deep Motion Features for Visual Tracking. [Online] arXiv: . Available: arXiv:v1
[44] Gaidon et al. 2016. Virtual Worlds as Proxy for Multi-Object Tracking Analysis. [Online] arXiv: . Available: arXiv:v1
[45] Lee et al. 2016. Globally Optimal Object Tracking with Fully Convolutional Networks. [Online] arXiv: . Available: arXiv:v1
原报告地址:
近看Andrew(吴恩达),远看冯巩
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
Pandas 通常用于快速简单的数据操作、聚合和可视化。在这篇文章中,我将概述如何学习这一工具的使用。
首先要给那些不熟悉 Pandas 的人简单介绍一下,Pandas 是 Python 生态系统中最流行的数据分析库。它能够完成许多任务,包括:
读/写不同格式的数据
选择数据的子集
跨行/列计算
寻找并填写缺失的数据
在数据的独立组中应用操作
重塑数据成不同格式
合并多个数据集
先进的时序功能
通过 matplotlib 和 seaborn 进行可视化操作
尽管 Pandas 功能强大,但它并不为整个数据科学流程提供完整功能。Pandas 通常是被用在数据采集和存储以及数据建模和预测中间的工具,作用是数据挖掘和清理。
数据科学管道
对于典型的数据科学家而言,Pandas 在数据管道传输过程中扮演着非常重要的角色。其中一个量化指标是通过社区讨论频率趋势()。
现在,Pandas 在 Stack Overflow 上的活动居 Python 数据科学库之首,占整个站点新问题提交总数的 1%。
Stack Overflow 的滥用
从上面的图标中,我们发现很多人都在使用 Pandas,但同时也对此很困惑。我在 Stack Overflow 上回答了关于 Pandas 的约 400 个问题,亲眼目睹了大家对这个库理解得多糟。Stack Overflow 给程序员提供了极大的便捷,但同时也产生了一个巨大的缺点。因为程序员能瞬间找到问题的答案并获得满足感,导致人们不愿意仔细阅读自己拥有的文献和其他资源了。其实我建议程序员每年花几个星期的时间不用 Stack Overflow 解决问题。
手把手教你学 Pandas
几个星期前有人询问我如何练习使用 Pandas,因此我在 r/datascience subreddit 上发布了一个简单的指南。下面的内容将详细说明那篇文章表达的信息。
首先,你应该摆正目标。你的目标不是真的要「学习 Pandas」。了解如何在库中执行运算是很有用的,但这和你在实际数据分析中需要用到的 Pandas 知识并不一样。你可以将你的学习分为两类:
独立于数据分析,学习 Pandas 库
学习在实际数据分析中使用 Pandas
打个比方,这两者的区别类似于,前者是学习如何将小树枝锯成两半,后者是在森林里砍一些树。在我们详细讨论之前,让我们先总结一下这两种方法。
独立于数据分析,学习 Pandas 库:此方法主要包括阅读、更关键的是探索 。
学习在实际数据分析中使用 Pandas:此方法涉及查找和收集真实世界的数据,并执行端到端的数据分析。Kaggle 数据集 是查找数据的好地方。不过我强烈建议你避免在流畅使用 Pandas 前使用 Kaggle 的机器学习组件。
在你学习如何使用 Pandas 进行数据分析的过程中,你应该交替学习 Pandas 文档的基础以及在真实数据库处理中的 Pandas 运用。这非常重要。否则,你很容易在掌握完成大部分任务所需的 Pandas 基础知识之后对他们产生完全的依赖。但其实在更高级的运算存在时,这些基础又显得太笨重了。
从文档开始
如果你此前从没有接触过 Pandas 但是有着 Python 的足够的基础知识,我建议你从 Pandas 官方文档开始。文档写得非常详细,现在共有 2195 页。即使文档的规模如此庞大,它还是没有涵盖每一个操作,当然也不涵盖你在 Pandas 中能使用的函数/方法与参数的所有组合。
充分利用文档
为了充分利用文档,不要只阅读它。我建议你阅读其中的 15 个 部分。对每个部分,新建一个 Jupyter notebook。如果你对 Jupyter notebook 不太熟悉,请先阅读来源于 Data Camp 的这篇文章:
建立你的首个 Jupyter notebook
请从「数据结构入门(Intro to Data Structures)」这个章节开始。在你的 Jupyter notebook 旁边打开这个页面。当你阅读文档时,写下(而不是复制)代码,并且在笔记本中执行。在执行代码的过程中,请探索这些操作,并尝试探索使用它们的新方法。
然后选择「索引和选择数据(Indexing and Selecting Data)」这个部分。新建一个 Jupyter notebook,同样编写、执行代码,然后探索你学到的不同操作。选择数据是初学者最难理解的部分,我专门在 .locvs .iloc 上写了一个长篇文章(),你可能想从中看到另一个解释。
在学习这两个部分之后,你应该能了解一个 DataFrame 和一个 Series 的组件,也能明白如何从数据中选择不同的子集。现在可以阅读「10 minutes to pandas」,以获得更加其他有用操作的广泛概述。和学习所有部分一样,请新建一个 notebook。
按下 shift + tab + tab 获得帮助
我经常在使用 Pandas 时按下 shift + tab + tab。当指针放在名称中或是在有效 Python 代码括号当中时,被指对象就会弹出一个小滚动框显示其文档。这个小框对我来说十分有用,因为记住所有的参数名称和它们的输入类型是不可能的。
按下 shift + tab + tab,开启 stack 方式的文档
你也可以在「.」之后直接按下 tab 键,得到全部有效对象的下拉菜单
在 DataFrame(df.) 后按下 tab,获得 200+ 有效对象列表
官方文档的主要缺点
虽然官方文档描述得非常详尽,但它并不能很好地指导如何正确使用真实数据进行数据分析。所有数据都是人为设计或者随机生成的。真正的数据分析会涉及好几个、甚至几十个 Pandas 操作串行。如果你只看文档,你永远不会接触到这些。使用文档学习 Pandas 呆板而机械,各个方法学起来相互独立没有联系。
建立你的首次数据分析
在读完上述三部分文档之后,就可以首次接触真实数据了。如前所述,我建议你从 Kaggle 数据集开始。你可以通过大众投票热度进行挑选,例如选择 TMDB 5000 Movie 数据集。下载数据,然后在该数据集上新建一个 Jupyter notebook。你可能目前并不能进行高级的数据处理,但你应该能联系你在文档的前三部分学到的知识。
每一个 Kaggle 数据集都有一个内核(kernel)部分。不要被「内核」这个名字迷惑了——它只是一个将 Kaggle 数据集放在 Python 或 R 语言处理的 Jupyter notebook。这是很好的学习机会。在你做了一些基本的数据分析之后,打开一个比较流行的 Python kernel,通读其中的几个,把你感兴趣的几个代码片段插入到自己的代码里。
如果对某些问题不能理解,你可以在评论区提问。其实你可以创建自己的 kernel,不过现在,我觉得你还是在本地笔记本上工作比较好。
回归官方文档
当你完成了你的第一个 kernel 之后,你可以回归文档然后阅读其他部分。下面是我建议的阅读顺序:
处理丢失的数据
分组:split-apply-combine 模式
重塑和数据交叉表
数据合并和连接
输入输出工具(Text,CSV,HDF5…)
使用文本数据
时间序列/日期功能
多重索引/高级索引
上述顺序与文档主页左侧的顺序明显不同,其中涵盖了我认为最重要的主题。文档中的某些部分没有在上面列出,你可以在之后自行阅读他们。
在阅读上述部分的文档并完成大约 10 个 Kaggle kernel 之后,你应该可以无障碍地弄懂 Pandas 的机制,同时可以顺利地进行实际数据分析。
学习探索性数据分析
通过阅读许多流行的 Kaggle kernel,你会在建立良好数据分析方面收获丰富。对于更加正式和严格的方法,我建议你阅读 Howard Seltman 在线书籍的第四章节,。
建立自己的 Kernel
你应该考虑在 Kaggle 上创建自己的 kernel。这是强制自己将程序写得清晰的好方法。通常,那些你自己写的代码都乱糟糟的没有顺序,对他人(包括未来的自己)来说都毫无可读性。但当你在网上发表 Kernel 的时候,我会建议你做得好一些,就像是期待你现在或未来老板读取那样。你可以在开头写一个执行总结或摘要,然后用注释解释每个代码块。我通常会写一个探索性但混乱的程序,然后再写一个完全独立可读的程序作为最终产品。这是我的一位学生在 HR analytics 数据集上写的 。
不要只是依赖 Pandas,试着掌握它
一个把 Pandas 用的过得去的人和一个掌握 Pandas 的人有很大的区别。Pandas 的常规用户通常只能写比较差的代码,因为 Pandas 有多种功能和多种方式去实现同样的结果。编写简单的程序也很容易得到你的结果,但其实效率非常低。
如果你是一个使用 Python 的数据科学家,你可能已经频繁使用 Pandas。所以你应该把掌握 Pandas 这件事摆在重要的位置上,它能够为你创造很多价值。
你可以在下面的链接中获得许多有趣的。
使用 Stack Overflow 检验你的知识
如果你不能回答 Stack Overflow 的关于一个 Python 库的大部分问题,你就不算真正了解它。这种论断可能有点绝对,但是大体说来,Stack Overflow 为特定了解一个库提供了很好的测试平台。Stack Overflow 上有超过 50000 个带有 Pandas 标签的问题,所以你有一个无穷无尽的数据库能建立你对 Pandas 的知识。
如果你从没有在 Stack Overflow 上回答过问题,我建议你看看那些已有答案的来问题,并且尝试只通过文档来回答他们。当你觉得你可以将高质量的回答整合起来的时候,我建议你回答一些没有被解答的问题。在 Stack Overflow 回答问题是锻炼我的 Pandas 技能的最佳方式。
完成你自己的项目
Kaggle kernel 非常棒,但最终你需要处理一个独一无二的任务。第一步是寻找数据。其中有许多数据资源,如:
data.world
纽约公开数据,休斯顿公开数据,丹佛公开数据——大多数美国大城市都开放了数据门户。
找到想要探索的数据集之后,继续用相同的方式创建 Jupyter notebook,当你有一个很好的最终成果时,可以将它发布到 github 上。
总之,作为一个初学者,我们需要使用文档学习 Pandas 运算的主要机制,使用真实的数据集,从 Kaggle kernel 开始学习做数据分析,最后,在 Stack Overflow 上检验你的知识。
原文链接:
作者:An_Feng_z 发表于
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
https://blog.csdn.net/An_Feng_z/article/details/
为了方面和节约时间,本次使用的python编译器和解释器分别为pycharm,python3.6.1RC
有一个神奇的网站
你一定不陌生
是不是总抢不到票啊
是不是观察着余票最新动态
告诉你一个新技能
12306自动抢票
前方高能,请系好好全带~~
首先在买票前我们需要先确认是否有票,那么进行正常的查票,打开输入出发地和目的地进行搜索。
那么一般在看到这个页面的时候我们能想到的获取车次及相关信息的方式是什么呢?对于零基础的同学而言第一时间就会想到在源代码里面找,但这里事实上源代码里面根本没有相关内容,因为该请求是采用的js中ajax异步请求的方式动态加载的,并不包含在源代码里面,所以我们只能够通过抓包的方式来查看浏览器与服务器的数据交互情况,我用的是谷歌浏览器所以打开开发者工具的快捷键是
F12(crtl+alt+i),此时只要是浏览器和服务器发生}

我要回帖

更多关于 设局 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信