机器学习用Python还是Golang?在我看来,Python在这几年使用的人比较多,主要原因是框架和包较多。反而Golang这几年使用的人比较少,主要原因是框架和包比较少。而为什么要拿Golang和Python比呢。我觉得如果Golang有Python那么多包和框架可以取代Python,刚好这几年Go+的出现能和Pyhton通用我觉得这一拓展接下来会和云人工智能有关系,当然目前只是猜测。接下来看看机器学习Python和Golang两者之间的比较。
机器学习阶段 | 年份 | 主要成果 | 代表人物 |
---|---|---|---|
人工智能起源 | 1936 | 自动机模型理论 | 阿兰•图灵(Alan Turing) |
1943 | MP模型 | 沃伦•麦卡洛克(Warren McCulloch) | |
1951 | 符号演算 | 冯• 诺依曼(John von Neumann) | |
1950 | 逻辑主义 | 克劳德•香农(Claude Shannon) | |
1956 | 人工智能 | 约翰•麦卡锡(John McCarthy)、马文•明斯基(Marvin Minsky )、 克劳德•香农(Claude Shannon) | |
人工智能初期 | 1958 | LISP | 约翰•麦卡锡(John McCarthy) |
1962 | 感知器收敛理论 | 弗兰克•罗森布拉特(Frank Rosenblatt) | |
1972 | 通用问题求解(GPS) | 艾伦•纽厄尔(Allen Newell)、赫伯特•西蒙(Herbert Simon) | |
1975 | 框架知识表示 | 马文•明斯基(Marvin Minsky) | |
进化计算 | 1965 | 进化策略 | 英格•雷森博格(Ingo Rechenberg ) |
1975 | 遗传算法 | 约翰•亨利•霍兰德(John Henry Holland) | |
1992 | 基因计算 | 约翰•柯扎(John Koza) | |
专家系统和知识工程 | 1965 | 模糊逻辑、模糊集 | 拉特飞•扎德(Lotfi Zadeh) |
1969 | DENDRA、MYCIN | 费根鲍姆(Feigenbaum )、布坎南(Buchanan )、莱德伯格(Lederberg) | |
1979 | ROSPECTOR | 杜达(Duda) | |
神经网络 | 1982 | 自组织网络 | 图沃•科霍宁(Teuvo Kohonen) |
1982 | Hopfield网络 | 霍普菲尔德(Hopfield) | |
1986 | BP算法 | 鲁姆哈特(Rumelhart)、麦克利兰(McClelland) | |
1989 | 卷积神经网络 | 乐康(LeCun) | |
1998 | LeNet | 乐康(LeCun) | |
1997 | 循环神经网络RNN | 塞普•霍普里特(Sepp Hochreiter)、尤尔根•施密德胡伯(Jurgen Schmidhuber) | |
分类算法 | 1986 | 决策树ID3算法 | 罗斯•昆兰(Ross Quinlan) |
1988 | Boosting 算法 | 弗罗因德(Freund)、米迦勒•卡恩斯(Michael Kearns) | |
1993 | C4.5算法 | 罗斯•昆兰(Ross Quinlan) | |
1995 | AdaBoost 算法 | 弗罗因德(Freund)、罗伯特•夏普(Robert Schapire) | |
1995 | 支持向量机 | 科林纳•科尔特斯(Corinna Cortes)、万普尼克(Vapnik) | |
2001 | 随机森林 | 里奥•布雷曼(Leo Breiman)、阿黛勒• 卡特勒(Adele Cutler ) | |
深度学习 | 2006 | 深度信念网络 | 杰弗里•希尔顿(Geoffrey Hinton) |
2012 | 谷歌大脑 | 吴恩达(Andrew Ng) | |
2014 | 生成对抗网络GAN | 伊恩•古德费洛(Ian Goodfellow) |
Python如今却稳坐编程语言界的霸主,尤其是在机器学习领域,所有主流机器学习框架都在用Python,当然Python爬虫也是有一部分功劳的。
Python引以为豪的机器学习算法,只是机器学习系统的一个组成部分。要实际大规模运行生产机器学习API。
以便流量波动不会破坏您的API,API管理,以处理的API部署滚动更新,以便您可以在更新模型的同时仍为用户提供服务。
对于像Cortex这样的开源机器学习部署平台,旨在使所有这些基础架构自动化,以及日志记录和成本优化等其他方面的关注,相比Python而言,Go更合。
并发对于机器学习基础架构至关重要,用户可以将许多不同的模型部署为不同的API,所有模型都在同一个Cortex集群中进行管理。
为了让Cortex Operator能够管理这些不同的部署,需要纠缠一些不同的API。
用户不会直接与任何这些API进行交互,取而代之的是,Cortex以编程方式调用这些API来供应集群,启动部署和监视API。
除此之外,Goroutines是正常的Go并发执行的功能。许多Goroutine可以放在一个OS线程上,如果Goroutine阻塞了OS线程,则Go运行时会自动将其余Goroutines移至新的OS线程。
使用asyncio等最新工具在Python中实现所有这些功能可能是可行的,但是Go的设计充分考虑了这种用例,这一事实使我们的生活变得更加轻松。
在Go中构建跨平台CLI更容易
Cortex CLI是一种跨平台工具,允许用户直接从命令行部署模型和管理API。Python编写的CLI尝试在各种平台之间分发太困难了。
因为Go可以编译成一个二进制文件(不需要依赖管理),所以它为我们提供了一个在平台之间分发CLI的简单解决方案,而无需进行过多的工程工作。经过编译的Go二进制文件和解释型语言的性能优势也很明显。
根据计算机基准测试游戏,Go的运行速度比Python快得多。许多其他基础结构CLI工具都是用Go编写的,这并非巧合。
Go生态系统非常适合基础设施项目
开源的好处之一是,您可以从自己欣赏的项目中学习。 例如,Cortex存在于Kubernetes(本身用Go编写)生态系统中。 我们很幸运能够在该生态系统中学习到许多出色的开源项目。
例如: kubectl
,minikube
,helm
,kops
等是用GO写的,不仅是Kubernetes项目。
无论是在看CockroachDB还是Hashicorp的基础设施项目,包括Vault,Nomad,Terraform,Consul和Packer,它们都是用Go编写的。
Go在基础设施领域的流行还有另一个影响,这就是大多数工程师都感兴趣!在基础架构方面工作的人对Go很熟悉,这使得吸引工程师更加容易。
除此以外,相比Python,Go的优势还体现在:
拥有非常棒的编译器,编译器可以检测出你犯的所有低级错误更好的并行性。Go 语言就是为并行而生的部署简单。代码所需要的所有依赖都在一个二进制文件里风格一致。格式化工具会让所有代码风格都保持一致更便捷的工具。一个编辑器+插件满足几乎所有需求,都不需要IDE适用于机器学习的Python,适用于基础架构的GoCortex服务于下面展示一些 。
TensorFlow
, PyTorch
, scikit-learn
和其他Python模型,这意味着与这些模型的接口以及推理前后的处理,用Python完成。但是,即使将Python代码打包到了Docker容器中,这些容器都是用Go语言编写的代码精心编排的。如果你有兴趣成为一名机器学习工程师,那么了解Python是必须的。但是,如果你对使用机器学习基础结构感兴趣,则应认真考虑使用Go。
大家觉得有什么方面说的不对可以再下方留言!
谢谢观看,希望大家能给个三连!