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

原标题:前辈说先学会了这些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图程序。

eaf124f4c3b94db8bfcf1c01b13428d0.jpeg

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

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

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

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

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

b3b7bb68242b49769fa7b490918faa43.jpeg

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

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

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

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

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值