原标题:前辈说先学会了这些Python知识点,再谈学习人工智能!

首先我们看一看Python的优势:

开源,跨平台。

社区。不要小看这一点。社区意味着有很多教程、书籍,出了问题很容易google到,乃至更好的IDE支持。

运行速度没有Java,C++快

当然,你会说上面这些优势Java和C++也有。实际上,Java的社区可能比Python大,至少Java的IDE比Python强(你可以自行对比下IntelliJ和PyCharm)。

语法设计的优雅。你可以说这些只是一些皮毛,无关痛痒。但这些皮毛其实是语言的"用户界面”。Java的语法是否优雅有争议,而C++的语法……

内存安全性。人工智能开发不应该操心指针错误这样的问题。当然Java不存在这个问题。

平滑的学习曲线。开发人工智能的人不一定都是程序员,很多学术界和从事数据分析的人并不熟悉C++。当然他们也可能不熟悉Python。但入门Python和入门C++的难度不可同日而语。

表达效率。Java和C++还是比较啰嗦的。虽然说靠谱的IDE可以自动生成代码,但这只是节省了打字的开销,而代码大部分时间是用来读的,而不是用来写的。

历史积累。人工智能涉及很多科学计算、数据可视化的任务。这方面,Python有非常优质的库,比如,numpy和pandas在别的语言里没有级别相当的替代品。

另外,速度其实并不是一个大问题。因为实际上你不一定真的在写Python.

比如,我们看以下TensorFlow代码的示例:

import tensorflow as tf

x = tf.placeholder(tf.float32, shape=[1, 1])

m = tf.matmul(x, x)

with tf.Session() as sess:

print(sess.run(m, feed_dict={x: [[2.]]}))

上面这段代码,明显是Python(这还用说?)。

但是,仔细看看,真的是Python吗?

实际上,这些代码构建了一个图m,然后通过tf.Session()的run方法运行了图m。

下面一段代码可能更明显,我们想迭代数据集dataset,在TensorFlow下需要这样写:

dataset = tf.data.Dataset.range(100)

iterator = dataset.make_one_shot_iterator()

next_element = iterator.get_next()

for i in range(100):

value = sess.run(next_element)

assert i == value

我们看到,我们不能直接使用Python迭代数据集,而要通过TensorFlow提供的方法构建迭代器。

这一情况可以类比使用Python访问SQL数据库:

t = ('RHAT',)

q = 'SELECT * FROM stocks WHERE symbol=?'

c.execute(q, t)

这里,我们构造了SQL请求语句,然后通过Python"执行”(execute)这些语句。表面上你在写Python,其实关键的逻辑在SQL语句里。更准确地说,你是在用Python构造SQL语句,然后运行构造的语句。这称为元编程(meta programming)。

同理,在TensorFlow下,表面上你在写Python,其实关键的逻辑都在TensorFlow图里。更准确地说,你是在用Python构造TensorFlow图,然后运行构造的图。

实际上,2017年万圣节(10月31日),Google发布了TensorFlow Eager Execution(贪婪执行),让你可以直接使用Python编程,而不是使用Python元编程TensorFlow图。

使用Eager Execution,上面两段TensorFlow代码可以改写为:

import tensorflow as tf

import tensorflow.contrib.eager as tfe

# 开启贪婪执行模式

tfe.enable_eager_execution()

x = [[2.]]

m = tf.matmul(x, x)

print(m)

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5, 6])

dataset = dataset.map(tf.square).shuffle(2).batch(2)

# Python风格的迭代器类

for x in tfe.Iterator(dataset):

print(x)

你看,TensorFlow明明可以"好好地”用Python编程的嘛。之前为什么要这么大费周折地绕一个圈子?

因为性能。

机器学习,尤其是现代的复杂模型,有着极高的算力需求。TensorFlow图可以很好地应对贪婪的算力需求,而Python则对此力不从心。

TensorFlow图专门针对机器学习的需求设计,所以可以很好地优化,以提升性能。

所以说,你其实大部分时间是在用Python进行元编程,并不需要操心Python的性能问题。

当然,天下没有免费的午餐。为了更好地优化,TensorFlow图对模型有着许多假设(这些假设从另一方面来说也是限制),也要求构造、运行分阶段进行(静态图模型)。这影响了模型的灵活性和表达力。

而像PyTorch这样支持动态图模型,更Pythonic的框架,为了优化性能可以说是煞费苦心,但仍有不足。

所以,Google Brain挖了Swift之父Chris Lattner做Swift For TensorFlow(上个月底刚刚开源),就是为了兼顾性能和灵活性。

Swift For TensorFlow对动态图模型代码进行分析,自动生成对应的TensorFlow图程序。

图程序提取(黄色方框)是Swift For TensorFlow的关键技术

上图中的model.swift没法换成model.py,因为Python那一大堆动态特性,使得Python无法被可靠地静态分析。

顺便说下题主关心的Java和C++。

model.java也不行,因为Java虽然是静态语言,但动态分发(dynamic dispatch)非常普遍。换句话说,Java主要的高层抽象手段,类和接口,都高度依赖动态分发。

model.cpp也许可以。但是,基于前面说过的C++的问题,C++没有机会。

总之,Python有一些主客观优势,再加上一些历史因素,成为当前人工智能的主流语言。但优势还没有大到和人工智能是"天作之合”的程度。而以后随着人工智能技术的发展,Python也未必能保持这个AI/ML主流语言的地位。

没有说人工智能要钦定Python,没有任何这个意思。但你一定要问Python到底有什么优势,它现在是人工智能的主流语言,怎么能没有优势?

下面我给大家介绍我整理的现阶段人工智能,Python的发展的路线是怎么样的:

欢迎大家关注,转发文章,人工智能,Python基础入门课程获取,私信小编(学习)就可以了!

责任编辑:

tensorflow和python先学哪个-前辈说先学会了这些Python知识点,再谈学习人工智能!...相关推荐

  1. 前辈说先学会了这些Python知识点,再谈学习人工智能、机器学习

    随着前面阿法尔go打败了围棋大师,让人工智能.机器学习大火了一把,然后学习人工智能和机器学习前提也需要掌握一定的Python知识点,那么学习这些前,我们究竟应该先掌握哪些Python知识点呢? 第一阶 ...

  2. python后端学什么框架_【后端开发】python框架是什么?有哪些?

    框架就是通过提供一个开发Web程序的基本架构,Python开发框架把PythonWeb程序开发摆到了流水线上.本篇文章将给大家介绍几款Python框架,有需要的朋友了解一下. Python开发框架有助 ...

  3. php和python哪个学起来简单一点-现在自学php和python那个合适?

    虽然我是phper.但我给的建议是从市场和环境考虑.什么意思?就是看市场的需求以及你能接触到什么样的环境. java也好python也好php也罢.你要明白目前自己的处境,如果你有好的周围资源~如朋友 ...

  4. 从python开始学编程pdf 解压密码_从Python开始学编程PDF高清完整版网盘免费分享...

    提取码:szq0 image 内容简介 · · · · · · 改编自Vamei博客的<Python快速教程>.本书以Python为样本,不仅介绍了编程的基本概念,还着重讲解编程语言的主流 ...

  5. python怎么学最快-零基础怎么样才能学好Python?Python入门必看

    Python目前可以用一个字来描述那就是"火",问题来了,这么火的语言零基础小白到底该怎样学习Python? 首先,从基础开始学习,切勿毛躁. 刚开始学习Python的时候,我们可 ...

  6. python新建文件夹口令_3分钟学会一段Python代码脚本,轻松实现破解FTP密码口令...

    很多关注我的小伙伴在上篇文章里学习到了如何利用python去破解加密的ZIP压缩文件,感觉很有意思,就有很多小伙伴问我有没有利用python脚本实现FTP服务器口令的暴力破解,今天小编就以此篇文章内容 ...

  7. python后端开发学路线_【后端开发】Python要学哪些内容?Python程序员学习路线图...

    很多零基础入门学习python不知道学习什么?也不知道Python要学哪些内容?下ki4网为您总结一下Python程序员学习路线图. python的应用范围是很广泛的,例如一些网络的爬虫,和web的开 ...

  8. c语言和python先学哪个好,python和c语言先学哪个

    c语言和python先学哪个? c语言和python先学哪个都可以,C语言和Python只是语法不同,作为入门语言各有各的好处.从C语言入门,C语言是面向过程的语言,其语法结构及其严谨,且应用十分广泛 ...

  9. Python编程课程好学吗?能学会吗?

    Python编程课程好学吗?能学会吗?Python是一种计算机程序设计语言,一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加越来越多被用于独 ...

最新文章

  1. Nagios配置之交换机及路由
  2. 配置ELK添加marvel插件
  3. Codeforces936C. Lock Puzzle
  4. c/c++面试试题(二)
  5. HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别...
  6. oracle 客户端连接数_转载:查看Oracle连接数
  7. python实现判断给定列表是否存在重复元素,且索引差小于k
  8. CE的EMC测试(EN55022-EN55024-EN55014)-转载
  9. windows C盘瘦身
  10. 杂谈:软件程序和芯片的区别
  11. SECS/GEM编程
  12. Java解析X509证书代码
  13. video标签使用controls属性怎么去掉三个点
  14. 网络安全技术——网络地址转换(NAT)
  15. NetScaler AG自定义用户门户
  16. 洛谷P5149 会议座位
  17. 漫威MARVEL漫画官方能力参考
  18. 威力曲面sw2020_威力曲面Power Surfacing
  19. 万级送风天花工作原理以及操作方法
  20. html表格标签以及CSS基础

热门文章

  1. Android Apt失效:找不到Apt生成的对应类
  2. 开发日记-20190711 关键词 Perl的后续学习
  3. Ubuntu 16.04 安装 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qt
  4. MySQL开启federated引擎实现数据库表映射
  5. UML-如何使用层进行设计?
  6. myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)
  7. Java并发编程(十)设计线程安全的类
  8. ExtJS 4.2 第一个程序
  9. 使用UIScrollView 实现分页功能
  10. golang--sync.WaitGroup使用示例