问题集录--新手入门深度学习,选择TensorFlow 好吗?

新手入门深度学习,选择 TensorFlow 有哪些益处?

佟达:首先,对于新手来说,TensorFlow的环境配置包装得真心非常好。相较之下,安装Caffe要痛苦的多,如果还要再CUDA环境下配合OpenCV使用,对于新手来说,基本上不折腾个几天是很难搞定的。

其次,基于TensorFlow的教学资源非常多,中英文的都有,这对于新手也是非常有帮助的。Google做社区非常有一套,在中国有专门的一群人,会在第一时间把Google的开发者相关的进展翻译成中文。

另外,由于有Google背书,TensorFlow从长期演进来看,基本上可以保证这个技术不会昙花一现。对于一个深度学习新手来说,学习任何一个工具,都有成本,如果刚学会,这个工具就没人用了,这个沉没成本还是很高的。

白发川:TensorFlow分为图和session两个部分,因为构建和执行在不同的阶段,所以很好的支持了模型的分布式,所以学习TF可以比较好的理解模型的分布式计算,另外TF支持直接从分布式文件系统,例如HDFS系统读取数据,所以可以说TF是接通机器学习和大数据的一个桥梁。

新人上手 TensorFlow 经常会遇到哪些问题或困难?

 佟达:第一个困难应该是来自编程范式的变化,因为TensorFlow是声明式开发方式,通过Session真正执行程序,这和常见的开发语言编程范式不太一样。如果是曾经有过函数式编程的Lazy Evaluation经验,接受起来会好一点。

当掌握了基本的TensorFlow操作之后,就要使用TensorFlow做些真正有意义的事情。这时候的一大困难在于,TensorFlow的报错信息不那么直观,如果执行出错,新手很难从一大堆调用栈中找到有用的信息。

白发川:首选遇到的应该是数学的知识,TF本身是一个深度学习的框架,和我们常规的程序框架例如Spring,Hibernate之类的框架定位不太一样,会偏向数学部分一点,例如矩阵计算,求导等,虽然TF已经封装了对应的计算的API,但是我们还是需要知道这些概念性的知识,这样才知道应该用什么API。

其次TF通过图的构建和计算部分分离实现模型的分布式,这一块的理解对初学者来说有时候也不太容易。

学习遇到困难之后,有哪些途径可以寻求帮助?

 佟达:如果身边有人可以提供指导,直接寻求帮助一定是最有效的。如果身边没有这样的人可以提供帮助,那么StackOverflow是在线寻求帮助的首选。Google的TensorFlow开发团队会有人专门在StackOverflow上回答问题,当然除了Google的人,还有很多热心的开发者提供帮助,比如说我(笑)。

白发川:目前TF的中文资料相对匮乏,所以优先的参考途径肯定是TF的官方doc文档,目前极客学院对TF官方文档做了汉化翻译,不过相对会比官方的延后一点。

 有没有推荐的学习资源?

 佟达:资源太多了,比如Udacity的Deep Learning课程,Coursera上的Machine Learning课程,还有Stanford提供的课程录像,比如CS231n和CS224n。另外,被称为深度学习圣经的《Deep Learning》也在网上(deeplearningbook.org)免费提供。

白发川:Stanford目前有很多针对机器学习的课程,例如CS231N,还有针对TF的CS20SI,这些都是很好的课程。

是否推荐新手从 Keras 入手?除 Keras,还有哪些适配 TensorFlow 的第三方工具推荐新手使用?

佟达: TensorFlow的API比较底层,有时候要做一件很简单的事情,要写很多辅助代码。而Keras的接口设计非常简洁,做同样的事情,Keras的代码大概是TensorFlow的三分之一到五分之一。不过我认为新手对两者都应该学习一下,这样对于理解原理更有帮助。事实上,我甚至推荐连TensorFlow都不用,先用纯Python自己做一个简单的神经网络。

除了Keras之外,tf slim,tflearn等都是早期尝试简化TensorFlow的工具,不过自从1.0开始,TensorFlow官方支持Keras,估计以后Keras会成为主流。

另外,TensorBoard是新手必须学会使用的,这个工具有非常好的可视化辅助工具,帮助工程师调试模型以及训练过程。tfdbg是1.0之后发布的调试工具,可以在每一个step中实时查看数据变化。不过这个工具目前能做的还不多,而且还有性能问题,开调试模式和非调试模式内存相差好几倍,所以还有很大的提升空间。

白发川:Keras相比TF来说封装的更好,可以说API更加工程化,所以如果说对于机器学习完全没有概念,Keras是一个不错的选择。目前有很多围绕TF进行封装的框架或者工具,例如Keras本身就是对TF的包装,其次TF Learn等也可尝试。

能不能讲讲你们当初上手 TensorFlow 的经历?学习过程中都遇到了哪些困难,又是如何解决的?

 佟达:我在使用TensorFlow之前,使用过其他一些机器学习/深度学习框架,比如主要用于语音识别的Kaldi,图像识别的Caffe,还有Spark MLlib,DeepLearning4j等。所以上手TensorFlow并没有带来特别大的困难。

当用TensorFlow做的事情越来越复杂之后,我开始尝试扩展TensorFlow,比如写一些自定义的Op。在TensorFlow中添加自定义Op需要用C++实现,编译好之后,在Python里面讲动态库链接进来才能使用。这一过程还是有些复杂,尤其是C++的代码有问题需要调试,需要使用lldb(llvm的debug工具,类似gdb),这对开发这的要求比较高。另外TensorFlow的编译使用的是Bazel,这是谷歌开源的一个多语言项目管理工具,要想把自定义的Op编译出来,还需要花点时间研究Bazel。

实际上,Google很成功的把TensorFlow封装的很好,开箱即用,然而,框架本身的复杂度还是很高,一旦你想要深入进去,还是需要下很大功夫。

白发川:TF不是我接触的第一个深度学习框架。我是从大数据做起,到后来的开始用Spark MLlib做开发,也使用过h2o和deeplearning4j这些框架,最后才接触TF的。所以对于我来说,更多的是学习TF的API设计相关的改变,以及对比其他框架TF做了哪些差异化的地方。对于API这一块,直接参考TF的Doc就是最好的方法。

不过我可以介绍一下入门到机器学习的经历,我最开始的工作也是和大多数人一样,从事web开发,或者mobile的开发,所以我的情况应该和大多数人相同,后来我开始接触到机器学习的时候发现和之前的思维差别挺大的,首先在我们从事一般的像mobile之类的开发的时候,我们并不会关心什么是矩阵的逆,什么是函数的导数,更加不会关心什么是链式求导,而在机器学习里面,这些都是基础,所以我又重新捡回了大学的线性代数和微积分再次过了一遍。

TF是个深度学习框架,所以使用TF的时候不可避免的要理解什么是隐层,什么是激活函数,激活函数有哪些,以及如何定义损失函数等等这一些概念,对于这一块我当时除了调研一些书籍外也通过看stanford的一些课程来学习,当然过程中也和很多同行进行交流和总结,特别是对于调参这一块,除了学习之外更多的需要自己进行实践。

TensorFlow 升级到 1.0 版本之后,感觉到了哪些提升?

 佟达:对我来说,TensorFlow 1.0最重要的变化在于高阶API,比如Estimator,以及和Keras的集成,这些改变可以大幅度的减少我们构建模型的代码量。

另外,1.0的API也经过了一些调整,这导致一些旧代码和新版本不兼容,不过从长期维护来看,1.0的API有更好的一致性,对于开发者来说,还是利大于弊。

白发川:首先相比之前的版本,1.0的速度肯定是变快了,这个官方也明确的提到了,并且也给出了一定的参考指标,TF 1.0加入了XLA,这也是为未来性能优化做的基础。

除了性能方面的体验外,在开发中,TF的API进行的很大的修改,相比之前来说更加的人性化,感觉起来有点像numpy的感觉,所以如果不是1.0的代码,可能会不兼容,不过TF提供了转换的脚本,可以方便直接把代码转换到1.0。

TF1.0提供了调试工具TFBDG,无论是大数据还是机器学习相关的开发,调试始终不是那么顺畅,而1.0提供的调试工具,可以说正在逐渐的弥补这一块,虽然目前还是有很多问题,不过已经有了很大的进步。

你们认为,目前 TensorFlow 有哪些局限性?其中又有哪些是开发者可以利用第三方工具克服的?

 佟达:TensorFlow的设计范式带来的一个天生限制就是在TensorFlow中,想要动态修改计算图比较困难。实际上动态修改计算图的需求并不少见,比如训练机器翻译或者聊天机器人的模型,句子长度不一样,计算图其实是不一样的。以前,要解决这个问题,就是设定一个比较长的输入长度,对于比较短的句子,填充一些占位字符。今年早些时候,TensorFlow发布了一个工具,TensorFlow Fold,可以相对方便的动态修改计算图。不过总的来说,TensorFlow在计算图的设计灵活性上还是有些欠缺。

白发川:目前来说,TF要想发挥最大的效果,还是需要借助于GPU,当然这并不算TF的局限,应该说所有数值计算的框架都有这个特点,对于这个目前大家的做法都是搭建自己的GPU集群,GOOGLE甚至开发了自己的GPU:TPU。

虽然大家都比较认可TF是工程化做的很好的深度学习框架,实际上它还是有一些门槛的,简单到API的设计,复杂到模型的训练和调参,其实还是是有一定门槛的,相比来说Keras的API设计更加直观化。

TF虽然提供了java和go的api,不过目前还不太成熟和稳定,所以对于开发语言,我还是推荐python,或者说我建议大家想往这个方向学习的时候,尽量掌握python这门语言,在我们实际开发中,会有很多用处的。

TensorFlow 在 ThoughtWorks 的业务中扮演了什么角色?对于公司进行产品开发,有没有更合适的选择?

 佟达:TensorFlow是 ThoughtWorks 目前在深度学习项目上的首选平台,因为它的工程化做的确实要比其他框架成熟,同时又和Hadoop、Kubernetes这些我们已经在很多项目中使用的工具兼容。

至于“更合适”,现在还不太好下判断,Facebook的PyTorch口碑很不错,MxNet被Amazon和很多IT公司支持,而Intel的BigDL另辟蹊径,在CPU上优化深度学习,而且和Spark无缝集成,看起来对于已经使用云计算和大数据工具的公司来说吸引力也非常大。所以在深度学习框架这个领域,目前处于百花齐放的状态,最后谁会胜出,还不好说。

白发川:ThoughtWorks 有自己的机器学习团队,主要方向为大数据和人工智能,当然这两个方向的划分并不完全独立的,实际上在实际开发中我们是将两者结合,实现基于大数据下的人工智能,对于深度学习的框架,我们spike过目前存在的大多数框架,最终选择了TF,所以我们的工作都是将TF工程化和市场化。

在选择对比了不同的框架之后,我们也比较明确现有框架的一些优缺点和局限,所以我们也研发了TW自己的深度学习框架:deeplearning.scala,框架本身是基于scala开发,具体的信息大家可以在github上看到,目前是开源的。

时间: 2024-12-08 10:41:30

问题集录--新手入门深度学习,选择TensorFlow 好吗?的相关文章

AI全面入门经典书籍-pytho入门+数学+机器学习+深度学习(tensorflow)一次性打包

百度网盘:https://pan.baidu.com/s/1SShwxxBIHB_rynF_jUjApA 一.内容清单: 1..python入门书籍:?? ??? ?python基础教程.pdf?? ??? ?python语言及其应用.pdf?? ??? ?python语言入门.pdf?? ??? ?像计算机科学家一样思考python第2版.pdf ?? ??? ?备注:自己找一本精读,其他辅助阅读,会有不一样的效果.?? ? 2.数学:?? ??? ?同济高等数学 第六版 上册.pdf?? ?

如何入门深度学习?

Tel-Aviv大学深度学习实验室的Ofir同学写了一篇如何入门深度学习的文章,顺手翻译一下,造福生物信息狗. 人工神经网络最近在很多领域(例如面部识别,物体发现和围棋)都取得了突破,深度学习变得炙手可热.如果你对深度学习感兴趣的话,这篇文章是个不错的起点. 如果你学过线性代数,微积分,概率论和编程,我建议你从斯坦福大学的CS231n课程开始.这门课内容广泛,写得很高.可每次课的幻灯片都可以下载,虽然官方网站删除了配套的视频,但是你很容易就能在网上搜索到. 如果你没有学过那些数学课,网上也有很多

(转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,<零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码,程序员的你一定能看懂的(我周围是一群狂热的Clean

分享《深度学习之TensorFlow:入门、原理与进阶实战》PDF+源代码

下载:https://pan.baidu.com/s/1zI-pblJ5dEwjGVe-QQP9hQ 更多资料:http://blog.51cto.com/3215120 <深度学习之TensorFlow:入门.原理与进阶实战>,李金洪 著.中文PDF,939页,带书签目录,文字可以复制粘贴.配套源代码. 如图: 原文地址:http://blog.51cto.com/14050756/2315854

C语言/C++编程新手入门基础学习中链接类型

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制).创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学C++能够持之以恒C++爱好群,如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组

深度学习之TensorFlow:入门原理与进阶实战

深度学习之TensorFlow:入门原理与进阶实战 链接:https://pan.baidu.com/s/1wUos19e7qhm_fA52FV8gQg 提取码:nz8i 目录 · · · · · · 配套学习资源 前言 第1篇 深度学习与TensorFlow基础 第1章 快速了解人工智能与TensorFlow 2 1.1 什么是深度学习 2 1.2 TensorFlow是做什么的 3 1.3 TensorFlow的特点 4 1.4 其他深度学习框架特点及介绍 5 1.5 如何通过本书学好深度学

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3

紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把NVIDIA显卡驱动安装好了 一.安装CUDA CUDA(Compute Unified Device Architecture),是英伟达公司推出的一种基于新的并行编程模型和指令集架构的通用计算架构,它能利用英伟达GPU的并行计算引擎,比CPU更高效的解决许多复杂计算任务,想使用GPU就必须要使用CUDA.

牛逼哥TensorFlow资源分享:白话深度学习与TensorFlow

今天,给大家分享一本关于TensorFlow的书籍-白话深度学习与TensorFlow. 最近在看这个深度学习框架,门外汉,为了快速入门,找的都是中文教材,可能准确度译文不如原文精确,但毕竟容易理解,上手快. 买了四本原版书,但有几本最近更新的书籍由于错过了双十一,感觉价格略贵,京东薅羊毛习惯了,一般三折以上的书我都不考虑买了. 所以想办法找到了电子书,也是通过各种途径吧,淘宝,闲鱼,论坛,大部分都是买的,网上下来的免费的好多都没有书签,而且质量不是很好. 在这里免费分享给大家,试了下,不知道为