企业对于深度学习的人才需求是什么?

2020-07-30 09:36发布

2条回答
Naughty
2楼 · 2020-08-13 09:49







作者:陈迪豪,小米深度学习工程师,负责小米云深度学习平台的架构和实现,目前专注于TensorFlow和Kubernetes社区。责编:何永灿,欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至heyc#csdn.net(#改为@)本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》

深度学习服务介绍机器学习与人工智能,相信大家已经耳熟能详,随着大规模标记数据的积累、神经网络算法的成熟以及高性能通用GPU的推广,深度学习逐渐成为计算机专家以及大数据科学家的研究重点。近年来,无论是图像的分类、识别和检测,还是语音生成、自然语言处理,甚至是AI下围棋或者打游戏都基于深度学习有了很大的突破。而随着TensorFlow、Caffe等开源框架的发展,深度学习的门槛变得越来越低,甚至初中生都可以轻易实现一个图像分类或者自动驾驶的神经网络模型,但目前最前沿的成果主要还是出自Google、微软等巨头企业。Google不仅拥有优秀的人才储备和大数据资源,其得天独厚的基础架构也极大推动了AI业务的发展,得益于内部的大规模集群调度系统Borg,开发者可以快速申请大量GPU资源进行模型训练和上线模型服务,并且通过资源共享和自动调度保证整体资源利用率也很高。Google开源了TensorFlow深度学习框架,让开发者可以在本地轻易地组合MLP、CNN和RNN等模块实现复杂的神经网络模型,但TensorFlow只是一个数值计算库,并不能解决资源隔离、任务调度等问题,将深度学习框架集成到基于云计算的基础架构上将是下一个关键任务。除了Google、微软,国内的百度也开源了PaddlePaddle分布式计算框架,并且官方集成了Kubernetes等容器调度系统,用户可以基于PaddlePaddle框架实现神经网络模型,同时利用容器的隔离性和Kubernetes的资源共享、自动调度、故障恢复等特性,但平台不能支持更多深度学习框架接口。而亚马逊和腾讯云相继推出了面向开发者的公有云服务,可以同时支持多种主流的开源深度学习框架,阿里、金山和小米也即将推出基于GPU的云深度学习服务,还有无数企业在默默地研发内部的机器学习平台和大数据服务。面对如此眼花缭乱的云服务和开源技术,架构师该如何考虑其中的技术细节,从用户的角度又该如何选择这些平台或者服务呢。我将介绍小米云深度学习平台的架构设计与实现细节,希望能给AI领域的研发人员提供一些思考和启示。云深度学习平台设计云深度学习平台,我定义为CloudMachineLearning,就是基于云计算的机器学习和深度学习平台。首先TensorFlow、MXNet是深度学习框架或者深度学习平台,但并不是云深度学习平台,它们虽然可以组成一个分布式计算集群进行模型训练,但需要用户在计算服务器上手动启动和管理进程,并没有云计算中任务隔离、资源共享、自动调度、故障恢复以及按需计费等功能。因此我们需要区分深度学习类库以及深度学习平台之间的关系,而这些类库实现的随机梯度下降和反向传播等算法却是深度学习应用所必须的,这是一种全新的编程范式,需要我们已有的基础架构去支持。云计算和大数据发展超过了整整十年,在业界催生非常多优秀的开源工具,如实现了类似AWSIaaS功能的OpenStack项目,还有Hadoop、Spark、Hive等大数据存储和处理框架,以及近年很火的Docker、Kubernetes等容器项目,这些都是构建现代云计算服务的基石。这些云服务有共同的特点,例如我们使用HDFS进行数据存储,用户不需要手动申请物理资源就可以做到开箱即用,用户数据保存在几乎无限制的公共资源池中,并且通过租户隔离保证数据安全,集群在节点故障或者水平扩容时自动触发Failover且不会影响用户业务。虽然Spark通过MLib接口提供部分机器学习算法功能,但绝不能替代TensorFlow、Caffe等深度学习框架的作用,因此我们仍需要实现CloudMachineLearning服务,并且确保实现云服务的基本特性——我将其总结为下面几条:屏蔽硬件资源保证开箱即用

缩短业务环境部署和启动时间

提供“无限”的存储和计算能力

实现多租户隔离保证数据安全

实现错误容忍和自动故障迁移

提高集群利用率和降低性能损耗

相比于MapReduce或者Spark任务,深度学习的模型训练时间周期长,而且需要调优的超参数更多,平台设计还需要考虑以下几点:支持通用GPU等异构化硬件

支持主流的深度学习框架接口

支持无人值守的超参数自动调优

支持从模型训练到上线的工作流

这是我个人对云深度学习平台的需求理解,也是小米在实现cloud-ml服务时的基本设计原则。虽然涉及到高可用、分布式等颇具实现难度的问题,但借助目前比较成熟的云计算框架和开源技术,我们的架构和实现基本满足了前面所有的需求,当然如果有更多需求和想法欢迎随时交流。云深度学习平台架构遵循前面的平台设计原则,我们的系统架构也愈加清晰明了,为了满足小米内部的所有深度学习和机器学习需求,需要有一个多租户、任务隔离、资源共享、支持多框架和GPU的通用服务平台。通过实现经典的MLP、CNN或RNN算法并不能满足业务快速发展的需求,因此我们需要支持TensorFlow等用户自定义的模型结构,并且支持高性能GPU和分布式训练是这个云深度学习平台的必须功能,不仅仅是模型训练,我们还希望集成模型服务等功能来最大化用户的使用效益。计算机领域有句名言“任何计算机问题都可以通过增加一个中间层来解决”。无论是AWS、OpenStack、Hadoop、Spark还是TCP/IP都是这样做的,通过增加一个抽象层来屏蔽底层资源,对上层提供更易用或者更可靠的访问接口。小米的cloud-ml平台也需要实现对底层物理资源的屏蔽,尤其是对GPU资源的抽象和调度,但我们不需要重新实现,因为社区已经有了很多成熟的分布式解决方案,如OpenStack、Yarn和Kubernetes。目前OpenStack和Yarn对GPU调度支持有所欠缺,虚拟机也存在启动速度慢、性能overhead较大等问题,而容器方案中的Kubernetes和Mesos发展迅速,支持GPU调度等功能,是目前最值得推荐的架构选型之一。目前小米cloud-ml平台的任务调度和物理机管理基于多节点的分布式Kubernetes集群,对于OpenStack、Yarn和Mesos我们也保留了实现接口,可以通过实现Mesos后端让用户的任务调度到Mesos集群进行训练,最终返回给用户一致的使用接口。目前Kubernetes最新稳定版是1.6,已经支持NvidiaGPU的调度和访问,对于其他厂商GPU暂不支持但基本能满足企业内部的需求,而且Pod、Deployment、Job、StatefulSet等功能日趋稳定,加上Docker、Prometheus、Harbor等生态项目的成熟,已经在大量生产环境验证过,可以满足通用PaaS或者CloudMachinelearning等定制服务平台的需求。使用Kubernetes管理用户的Docker容器,还解决了资源隔离的问题,保证不同深度学习训练任务间的环境不会冲突,并且可以针对训练任务和模型服务使用Job和Deployment等不同的接口,充分利用分布式容器编排系统的重调度和负载均衡功能。但是,Kubernetes并没有完善的多租户和Quota管理功能,难以与企业内部的权限管理系统对接,这要求我们对KubernetesAPI进行再一次“抽象”。我们通过APIServer实现了内部的AKSK签名和认证授权机制,在处理用户请求时加入多租户和Quota配额功能,并且对外提供简单易用的RESTfulAPI,进一步简化了整个云深度学习平台的使用流程,整体架构设计如图1。图1云深度学习平台整体架构通过实现APIServer,我们对外提供了API、SDK、命令行以及Web控制台多种访问方式,最大程度上满足了用户复杂多变的使用环境。集群内置了Docker镜像仓库服务,托管了我们支持的17个深度学习框架的容器镜像,让用户不需要任何初始化命令就可以一键创建各框架的开发环境、训练任务以及模型服务。多副本的APIServer和Etcd集群,保证了整个集群所有组件的高可用,和Hadoop或者Spark一样,我们的cloud-ml服务在任意一台服务器经历断网、宕机、磁盘故障等暴力测试下都能自动Failover保证业务不受任何影响。前面提到,我们通过抽象层定义了云深度学习平台的接口,无论后端使用Kubernetes、Mesos、Yarn甚至是OpenStack、AWS都可以支持。通过容器的抽象可以定义任务的运行环境,目前已经支持17个主流的深度学习框架,用户甚至可以在不改任何一行代码的情况下定义自己的运行环境或者使用自己实现的深度学习框架。在灵活的架构下,我们还实现了分布式训练、超参数自动调优、前置命令、NodeSelector、BringYourOwnImage和FUSE集成等功能,将在下面逐一介绍。云深度学习平台实现前面提到我们后端使用Kubernetes编排系统,通过APIServer实现授权认证和Quota配额功能。由于云深度学习服务是一个计算服务,和我以前做过的分布式存储服务有着本质的区别,计算服务离线运算时间较长,客户端请求延时要求较低而且吞吐很小,因此我们的API服务在易用性和高性能上可以选择前者,目前主流的Web服务器都可以满足需求。基于Web服务器我们可以实现集成内部权限管理系统的业务逻辑,小米生态云提供了类似AWS的AKSK签名认证机制,用户注册登录后可以自行创建Accesskey和Secretkey,请求时在客户端进行AKSK的签名后发送,这样用户不需要把账号密码或密钥加到请求中,即使密钥泄露也可以由用户来禁用,请求时即使签名被嗅探也只能重放当前的请求内容,是非常可靠的安全机制。除此之外,我们参考OpenStack项目的体系架构,实现了多租户和Quota功能,通过认证和授权的请求需要经过Quota配额检查,在高可用数据库中持久化相应的数据,这样平台管理员就可以动态修改每个租户的Quota,而且用户可以随时查看自身的审计信息。小米cloud-ml服务实现了深度学习模型的开发、训练、调优、测试、部署和预测等完整功能,都是通过提交到后端的Kubernetes集群来实现,完整的功能介绍可以查看官方文档http://docs.api.xiaomi.com/cloud-ml/。Kubernetes对外提供了RESTfulAPI访问接口,通过YAML或者JSON来描述不同的任务类型,不同编程语言实现的系统也可以使用社区开发的SDK来访问。对于我们支持的多个深度学习框架,还有开发环境、训练任务、模型服务等功能,都需要定制Docker镜像,提交到Kubernetes时指定使用的容器镜像、启动命令等参数。通过对KubernetesAPI的封装,我们可以简化Kubernetes的使用细节,保证了对Mesos、Yarn等后端支持的兼容性,同时避免了直接暴露KubernetesAPI带来的授权问题以及安全隐患。除了可以启动单个容器执行用户的训练代码,小米cloud-ml平台也支持TensorFlow的分布式训练,使用时只需要传入ps和worker个数即可。考虑到对TensorFlow原生API的兼容性,我们并没有定制修改TensorFlow代码,用户甚至可以在本地安装开源的TensorFlow测试后再提交,同样可以运行在云平台上。但本地运行分布式TensorFlow需要在多台服务器上手动起进程,同时要避免进程使用的端口与其他服务冲突,而且要考虑系统环境、内存不足、磁盘空间等问题,代码更新和运维压力成倍增加,CloudMachineLearning下的分布式TensorFlow只需要在提交任务时多加两个参数即可。有人觉得手动启动分布式TensorFlow非常繁琐,在云端实现逻辑是否更加复杂?其实并不是,通过云服务的控制节点,我们在启动任务前就可以分配不会冲突的端口资源,启动时通过容器隔离环境资源,而用户不需要传入Clusterspec等繁琐的参数,我们遵循GoogleCloudML标准,会自动生成Clusterspec等信息通过环境变量加入到容器的启动任务中。这样无论是单机版训练任务,还是几个节点的分布式任务,甚至是上百节点的分布式训练任务,cloud-ml平台都可以通过相同的镜像和代码来运行,只是启动时传入的环境变量不同,在不改变任何外部依赖的情况下优雅地实现了看似复杂的分布式训练功能。图2云深度学习平台分布式训练看到这里大家可能认为,小米的cloud-ml平台和Google的CloudML服务,都有点类似之前很火的PaaS(PlatformasaService)或者CaaS(ContainerasaService)服务。确实如此,基于Kubernetes或者Mesos我们可以很容易实现一个通用的CaaS,用户上传应用代码和Docker镜像,由平台调度和运行,但不同的是CloudMachineLearning简化了与机器学习无关的功能。我们不需要用户了解PaaS的所有功能,也不需要支持所有编程语言的运行环境,暴露提交任务、查看任务、删除任务等更简单的使用接口即可,而要支持不同规模的TensorFlow应用代码,用户需要以标准的Python打包方式上传代码。Python的标准打包方式独立于TensorFlow或者小米cloud-ml平台,幸运的是目前GoogleCloudML也支持Python的标准打包方式,通过这种标准接口,我们甚至发现GoogleCloudML打包好的samples代码甚至可以直接提交到小米cloud-ml平台上训练。这是非常有意思的尝试,意味着用户可以使用原生的TensorFlow接口来实现自己的模型,在本地计算资源不充足的情况下可以提交到GoogleCloudML服务上训练,同时可以一行代码不用改直接提交到小米或者其他云服务厂商中的云平台上训练。如果大家在实现内部的云深度学习平台,不妨也参考下标准的Python打包方式,这样用户同一份代码就可以兼容所有云平台,避免厂商绑定。除了训练任务,CloudMachineLearning平台最好也能集成模型服务、开发环境等功能。对于模型服务,TensorFlow社区开源了TensorFlowServing项目,可以加载任意TensorFlow模型并且提供统一的访问接口,而Caffe社区也提供了Webdemo项目方便用户使用。目前Kubernetes和Mesos都实现了类似Deployment的功能,通过制作TensorFlowServing等服务的容器镜像,我们可以很方便地为用户快速启动对应的模型服务。通过对KubernetesAPI的封装,我们在暴露给用户API时也提供了replicas等参数,这样用户就可以直接通过KubernetesAPI来创建多副本的Deployment实例,并且由Kubernetes来实现负载均衡等功能。除此之外,TensorFlowServing本身还支持在线模型升级和同时加载多个模型版本等功能,我们在保证TensorFlowServing容器正常运行的情况下,允许用户更新分布式对象存储中的模型文件就可以轻易地支持在线模型升级的功能。对于比较小众但有特定使用场景的深度学习框架,CloudMacineLearning的开发环境、训练任务和模型服务都支持BringYourOwnImage功能,也就是说用户可以定制自己的Docker镜像并在提交任务时指定使用。这种灵活的设置极大地降低了平台管理者的维护成本,我们不需要根据每个用户的需求定制通用的Goldenimage,事实上也不可能有完美的镜像可以满足所有需求,用户不同的模型可能有任意的Python或者非Python依赖,甚至是自己实现的私有深度学习框架也可以直接提交到CloudMachineLearning平台上训练。内测BYOI功能时,我们还惊喜地发现这个功能对于我们开发新的深度学习框架支持,以及提前测试镜像升级有非常大的帮助,同时用户自己实现的Caffe模型服务和XGBoost模型服务也可以完美支持。当然CloudMachineLearning平台还可以实现很多有意思的功能,例如通过对线上不同GPU机型打label,通过NodeSelector功能可以允许用户选择具体的GPU型号进行更细粒度的调度,这需要我们暴露更底层KubernetesAPI实现,这在集群测试中也是非常有用的功能。而无论是基于GPU的训练任务还是模型服务,我们都制作了对应的CUDA容器镜像,通过Kubernetes调度到对应的GPU计算节点就可以访问本地图像处理硬件进行高性能运算了。小米cloud-ml还开放了前置命令和后置命令功能,允许用户在启动训练任务前和训练任务结束后执行自定义命令,对于不支持分布式存储的深度学习框架,可以在前置命令中挂载S3fuse和FDSfuse到本地目录,或者初始化HDFS的Kerberos账号,灵活的接口可以实现更多用户自定义的功能。还有超参数自动调优功能,与GoogleCloudML类似,用户可以提交时指定多组超参数配置,云平台可以自动分配资源起多实例并行计算,为了支持读取用户自定义的指标数据,我们实现了类似TensorBoard的Python接口直接访问TensorFloweventfile数据,并通过命令行返回给用户最优的超参数组合。最后还有TensorFlowApplicationTemplate功能,在CloudMachineLearning平台上用户可以将自己的模型代码公开或者使用官方维护的开源TensorFlow应用,用户提交任务时可以直接指定这些开源模板进行训练,模板已经实现了MLP、CNN、RNN和LR等经典神经网络结构,还可以通过超参数来配置神经网络每一层的节点数和层数,而且可以支持任意稠密和稀疏的数据集,这样不需要编写代码就可以在云平台上训练自己的数据快速生成AI模型了。在前面的平台设计和平台架构后,要实现完整的云深度学习服务并不困难,尤其是集成了Docker、Etcd、Kubernetes、TensorFlow等优秀开源项目,组件间通过API松耦合地交互,需要的重复工作主要是打通企业内部权限系统和将用户请求转化成Kubernetes等后端请求而已,而支持标准的打包方式还可以让业务代码在任意云平台上无缝迁移。云深度学习平台实践目前小米云深度学习平台已经在内部各业务部门推广使用,相比于直接使用物理机,云服务拥有超高的资源利用率、快速的启动时间、近乎“无限”的计算资源、自动的故障迁移、支持分布式训练和超参数自动调优等优点,相信可以得到更好的推广和应用。除了完成上述的功能,我们在实践时也听取了用户反馈进行改进。例如有内部用户反馈,在云端训练的TensorFlow应用把eventfile也导出到分布式存储中,使用TensorBoard需要先下载文件再从本地起服务相对麻烦,因此我们在原有基础架构实现了TensorboardService功能,可以一键启动TensorBoard服务,用户只需要用浏览器就可以打开使用。管理GPU资源和排查GPU调度问题也是相当繁琐的,尤其是需要管理不同GPU设备和不同CUDA版本的异构集群,我们统一规范了CUDA的安装方式,保证Kubernetes调度的容器可以正常访问宿主机的GPU设备。当然对于GPU资源的调度和释放,我们有完善的测试文档可以保证每一个GPU都可以正常使用,根据测试需求实现的NodeSelector功能也帮忙我们更快地定位问题。由于已经支持几十个功能和十几个深度学习框架,每次升级都可能影响已有服务的功能,因此我们会在多节点的分布式staging集群进行上线演习和测试,并且实现smoketest脚本进行完整的功能性测试。服务升级需要更新代码,但是为了保证不影响线上业务,无论是Kubernetes还是我们实现的APIServer都有多副本提供服务,通过高可用技术先迁移服务进行滚动升级,对于一些单机运行的脚本也通过Etcd实现了高可用的抢主机制,保证所有组件没有单点故障。大家可以通过前面提到的文档地址和cloud-ml-sdk项目了解到更多细节,或者关注我微博(@tobe-陈迪豪)与我交流。总结本文介绍了实现企业级云深度学习平台需要的概念和知识,基于小米cloud-ml服务探讨了云平台的设计、架构、实现以及实践这四方面的内容,希望大家看完有所收获。订阅《程序员》(含iOS、Android及印刷版)请访问http://dingyue.programmer.com.cn

2017中国人工智能大会(CCAI2017)|7月22日-23日杭州

本届CCAI由中国人工智能学会、蚂蚁金服主办,由CSDN承办,最专业的年度技术盛宴:

-40位以上实力讲师

-8场权威专家主题报告

-4场开放式专题研讨会

-超过100家媒体报道

-超过2000位技术精英和专业人士参会与大牛面对面,到官网报名:http://ccai.caai.cn/


Anonyem
3楼 · 2020-10-15 14:13


内容简介

面向广泛的技术受众(从数据科学家、工程师到学生和研究人员),本书介绍了TensorFlow的基本原理和实践方法。从TensorFlow中的一些基本示例开始,深入探讨诸如神经网络体系结构、TensorBoard可视化、TensorFlow抽象库和多线程输入管道等主题。阅读本书,你将学会如何使用TensorFlow构建和部署工业级深度学习系统。

通过阅读本书,你将:

轻松愉快地安装并运行TensorFlow。学习如何使用TensorFlow从头开始构建深度学习模型。训练流行的计算机视觉和NLP深度学习模型。使用抽象库来使开发更容易和更快速。学习如何扩展TensorFlow并使用集群分布式训练模型。在生产环境中部署TensorFlow。

作者简介

TomHope是一位应用机器学习研究者和数据科学家,在学术界和工业界拥有广泛的背景。他领导了跨领域的数据科学和深度学习的研发团队。

YehezkelS.Resheff是机器学习和数据挖掘领域的应用研究人员。在读博士期间,他的工作主要围绕开发机器学习和深度学习方法来分析可穿戴设备和物联网的数据。他在英特尔和Microsoft公司领导了深度学习的研发工作。

ItayLieder是机器学习和计算神经科学领域的应用研究人员。在研究生学习期间,他开发了用于模拟低级知觉的计算方法。他曾在大型跨国公司工作,在文本分析、Web挖掘领域从事深度学习研发。

本书内容

译者序

深度学习是目前人工智能、机器学习领域非常火热的研究方向,而作为深度学习的工具之一的TensorFlow上线不到两年便成为Github最受欢迎的深度学习项目之一。在过去的日子里,TensorFlow帮助了许许多多的研究人员、工程师、艺术家、在校学生等改善自己的工作与生活,从语言翻译、皮肤癌早期诊断到预防糖尿病眼病引发的失明等方方面面都有它的身影。

在现在的深度学习大潮之下,本书是一本不可或缺的入门级参考书,本书作者都是机器学习领域的资深工程师,在深度学习应用方面有着深厚的积累。原书设计结构合理,从TensorFlow基础开始,逐步展开,清晰地给出了如何使用TensorFlow的指导。全书共10章,内容涉及卷积神经网络、循环神经网络等核心的深度学习模型,以及分布式场景下TensorFlow的使用方法。在书中不仅有一些原理性的讲解,还包含大量实践训练内容,相信读者在阅读本书之后能够掌握一定的实践技巧和方法,为使用深度学习(基于TensorFlow框架)解决未来在学习和工作中遇到的相关问题打下良好的基础。

我一直有将学习和工作的过程用某种方式记录下来的习惯,这些内容发布在一些博客上。此前有翻译深度学习的入门教程书籍和部分重要的研究论文。除此之外,还花费一定的时间精力来组织学习社区,创办了深度学习国际群和DeepLearningMeet-up。早在2014年,这样专注于深度学习和前沿人工智能技术的社区及相应活动在国内几乎没有。彼时,以每周一次的频率进行学习交流,发展成每月一次的社区活动。后来,在社区的基础之上,我和几位有着共同志趣的深度学习社区成员共同创立了UniversityAI,专注于培养优秀的人工智能人才,其网址为http://universityai.com,微信公众号:UAI人工智能。UniversityAI致力于推进中国人工智能化进程,现在已经给多家985高校讲授前沿人工智能课程,并给多家500强企业提供人工智能内训。

由于深度学习和TensorFlow都处在快速发展、不断迭代的过程之中,欢迎感兴趣的读者和我进一步交流。如果读者对于书中的某些翻译持有疑义,也欢迎同我探讨。

朱小虎


2018年1月30日写于UAIUnknownLab玄武阁

译者简介

朱小虎:UniversityAI创始人和首席科学家,UniversityAI-AI-UnconferenceMeetup组织者,致力于推进世界人工智能化进程。制定并实施UAI中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。

作为行业领导者,他在2014年创建了TASA(中国最早的深度学习社团)、DLCenter(深度学习知识中心全球价值网络)、AIgrowth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,翻译了深度学习入门书《神经网络与深度学习》,他的文章被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师的好评。

李紫辉:美国耶鲁大学计算机在读博士生,现工作于耶鲁大学LILY实验室,研究兴趣为自然语言处理与迁移学习。UniversityAI研究员。于2014年毕业于武汉轻工大学,拥有管理学和文学双学士学位;于2015年毕业于爱尔兰国立都柏林大学,取得计算机科学硕士学位。先后于IBM爱尔兰研究院、埃森哲爱尔兰AI实验室等多家研究机构实习与工作,研究重点为将深度学习技术应用于健康、航空等领域。

前言

深度学习在过去的若干年中已经成为构建可以从数据中学习的智能系统的首要技术。深度神经网络最开始在一定程度上受到人类大脑学习方式的启发,是用大量数据进行训练从而能够以足够高的准确度解决复杂任务的技术。由于开源框架的广泛存在,这项技术也被广泛使用,目前已经成为任何想要从事大数据和机器学习工作的人的必备知识。

TensorFlow是当前深度学习领域领先的开源软件,使用它从事计算机视觉、自然语言处理(NLP)、语音识别和一般性预测分析工作的技术实践者(工程师)的数目仍在飞速增长。

本书是专为数据科学家、工程师、学生和科研工作者设计的TensorFlow“端对端”指导。书中采取适合广大技术读者的实战观点,不仅让初学者能够接受,也会深入探讨一些高级话题并展示如何构建产品级的系统。

通过本书,你可以习得:

快速顺畅地安装和运行TensorFlow。使用TensorFlow从零构建模型。训练和理解流行的用于计算机视觉和NLP的深度学习模型。使用多种抽象库让开发更加简单和迅速。使用队列和多线程扩展TensorFlow,在集群上训练,在产品级应用上部署输出结果。还有更多其他内容!

本书由同时在工业界和学术界拥有大量研发经验的数据科学家撰写。作者采用实战观点,结合实际且直观的案例、解释及供实践者们探索构建产品级系统的洞察,满足想要学会理解和构建灵活强大模型的读者的需求。

预备知识

本书假定读者有基本的Python编程知识,包括熟悉科学计算库Numpy。

机器学习的概念在本书中会被讨论,并且贯穿全书进行直观解说。对于想深入学习的读者,建议你掌握一定程度的机器学习、线性代数、微积分、概率论和统计学方面的知识。

本书约定

下面给出本书所采用字体的约定:

斜体字(Italic)

表示新的术语、链接、电子邮箱地址、文件名和文件扩展名。

等宽字体(Constantwidth)

用于程序清单,也用于在段落中引用程序元素,例如变量名、函数名、数据库、数据类型、环境变量、程序语句和关键词。

加粗等宽字体(Constantwidthbold)

表示应该由用户输入的命令或者其他文字信息。

斜体的等宽字体(Constantwidthitalic)

表示此处应该替换为由用户提供的数值,或者根据上下文确定的数值。

如何使用示例代码

补充材料(示例代码、练习等)可以在https://github.com/Hezi-Resheff/Oreilly-Learning-TensorFlow上下载。

本书的目的是帮助你完成自己的任务。一般来说,如果代码是和本书一起提供的,那么你可以在你的程序和文档中使用它们。你不需要联系我们获取许可,除非你想大量复制这些代码。例如,在自己的程序中使用到本书中的几段代码,并不需要获得许可,但把O’Reilly书籍里的示例代码刻录成光盘就必须获得许可。回答问题时引用本书内容和示例代码,不需要获得许可,但是将大量的示例代码用于你的产品文档则必须获得许可。

我们期望但不强求大家引用时注明出处。一般来说,出处通常包括标题、作者、出版商和国际标准书号(ISBN)。例如,《LearningTensorFlow》(《TensorFlow学习指南》),作者TomHope、YehezkelS.Resheff和ItayLieder(O'Reilly出版),书号978-1-491-97851-1。

如果你觉得自己使用的示例代码超出了限定的许可范围之列,欢迎通过邮件联系我们确认(permission@oreilly.com)。

Safari在线图书

SafariBooksOnline针对企业、政府、教育机构和个人提供了不同的购买计划,你可根据实际需求进行选购。

用户可以访问上千种图书、培训视频、学习路径、互动教材和专业的播放列表,这些内容来自超过250个出版商,包括O’ReillyMedia、哈佛商业评论、PrenticeHallProfessional、Addison-WesleyProfessional、MicrosoftPress、Sams、Que、PeachpitPress、Adobe、FocalPress、CiscoPress、JohnWiley&Sons、Syngress、MorganKaufmann、IBMRedbooks、Packt、AdobePress、FTPress、Apress、Manning、NewRiders、McGraw-Hill、Jones&Bartlett和CourseTechnology等。关于Safari在线图书的更多信息,请访问http://oreilly.com/safari。

联系方式

美国:

O'ReillyMedia,Inc.

1005GravensteinHighwayNorth

Sebastopol,CA95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们创建了关于本书的网页,上面有勘误表、示例和所有的附加信息。可以通过链接http://bit.ly/learning-tensorflow访问。

关于本书的评论和技术问题,请发邮件给bookquestions@oreilly.com。

关于本书的更多信息,如教程、会议、新闻,请参见网站:

http://www.oreilly.com

http://www.oreilly.com.cn

致谢

作者要感谢为本书提供反馈的审校人员:ChrisFregly、MarvinBertin、OrenSarShalom和YoniLavi。还要感谢NicoleTache和O’Reilly团队让写作本书成为一件令人高兴的事情。

当然,要感谢TensorFlow的所有开发人员—没有他们就不会有TensorFlow。


第1章引言



第2章随之“流”动:启动与运行TensorFlow



第3章理解TensorFlow基础知识



第4章卷积神经网络



第5章文本I:文本及序列的处理,以及TensorBoard可视化(上)



第5章文本I:文本及序列的处理,以及TensorBoard可视化(下)



第6章文本II:词向量、高级RNN和词嵌入可视化



第7章TensorFlow抽象与简化(上)



第7章TensorFlow抽象与简化(下)



第8章队列、线程和数据读取



第9章分布式TensorFlow



第10章用TensorFlow导出和提供服务模型



附录A模型构建和使用TensorFlowServing的建议


阅读全文:http://gitbook.cn/gitchat/geekbook/5c19b8461e59245d4d2ad512


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问