深度学习之TensorFlow实战5

本文详细介绍了TensorFlow数据读取的三种方式:供给数据、从文件读取和预加载数据。同时,阐述了模型的保存与提取过程,以及如何使用tf.train.Saver进行模型的保存和恢复。接着,文章深入探讨了TensorFlow的分布式训练,包括单机多GPU、多机GPU等场景,并解析了集群、任务和工作节点的概念。最后,讨论了同步训练和异步训练两种策略及其适用场景。

在这里插入图片描述

TensorFlow数据读取

TensorFlow提供了三种方式来读取数据:
供给数据(Feeding):在TensorFlow程序运行的每一步,让Python代码来供给数据
从文件读取数据(深度学习中主要应用):在TensorFlow图的起始,让一个输入管线
从文件中读取数据
预加载数据:在TensorFlow图中定义常量或变量来保存所有数据(仅适合小规模数
据集的情况)

TensorFlow模型保存、提取

TensorFlow使用tf.train.Saver类实现模型的保存和提取。Saver对象的saver方法将TensorFlow模型保存到指定路径中。
通过Saver对象的restore方法可以加载模型,并通过保存好的模型变量相关值重新加载完全加载进来。
如果不希望重复定义计算图上的运算,可以直接加载已经持久化的图,通过tf.train.import_meta_graph方法直接加载
备注:在加载的时候,可以在Saver对象构建的时候,明确给定变量名之间的映
射关系
案例:分别实现模型的保存、提取操作
在这里插入图片描述

TensorFlow分布式训练

使用单台机器或者单个GPU/CPU来进行模型训练,训练速度会受资源的影响,因为毕竟单个的设备的计算能力和存储能力具有一定的上限的,针对这个问题,TensorFlow支持分布式模型运算,支持多机器、多GPU、多CPU各种模型的组合运行方案的设计。(默认情况下,TensorFlow程序会将程序运行在第一个GPU上<如果有GPU,并且安装的TensorFlow支持GPU运行>)TensorFlow的分布式支持单机多GPU、单机GPU+CPU、多机GPU等结构,不过所有结构的构建方式基本类似。除了TensorFlow外,Caffe、DeepLearning4j等也支持分布式训练,并且其中DeepLearning4j的分布式效果相对比较成熟

TensorFlow中的集群(Cluster)指的是一系列能够对TensorFlow中的图(graph)进行分布式计算的任务(task)。每个任务是同服务(server)相关联的。TensorFlow中的服务会包含一个用于创建session的主节点和至少一个用于图运算的工作节点。另外在TensorFlow中,一个集群可以被拆分为一个或者多个作业( job),每个作业可以包含至少一个任务。

在这里插入图片描述
TensorFlow分布式集群的构建主要通过代码实现,主要步骤如下:
创建集群(Cluster)
创建一个tf.train.ClusterSpec用于对集群中的所有任务进行描述,该描述内容对于所有
内容应该是相同的。
创建tf.train.Server并将tf.train.ClusterSpec中参数传入构造函数,
使用tf.device API指定运算的设备,构建计算图,最后提交运算
备注:TensorFlow负责内部作业之间的数据传输

在这里插入图片描述
TensorFlow中主要包含两个方面,第一:对不同数据大小进行计算的任务(work作业),第二:用于不停更新共享参数的任务(ps作业)。这样任务都可以运行不同在机器上,在TensorFlow中,主要实现方式如下:
图内的拷贝(In-Graph Replication)
图间的拷贝(Between-Graph Replication)
异步训练(Asynchronous Training)
同步训练(Synchronous Training)

在In-Graph Replication模式中,指定整个集群由一个客户端来构建图,并且这个客户端来提交图到集群中,worker只负责处理执行任务。In-Graph模式的好处在于解耦了TensorFlow集群和训练应用之间的关系,这样可以提前构建好参数服务器和计算服务器,而这些角色本身不需要额外的逻辑代码,只需要使用join等待即可,真正的训练逻辑全部位于客户端,具有足够高的灵活性。
在Between-Graph Replication模式中,每个客户端会构建一个相似的图结构,该结构中的参数均通过ps作业进行声明并使用tf.train.replica_device_setter方法将参数映射到不同的任务作业中。
备注:在小规模数据集的情况下,经常使用。在海量数据的训练过程中,不建议使用该方式,建议使用Between-Graph Replication模式。

Synchronous Training:在同步训练中,每个graph的副本读取相同的parameter值,并行的计算,然后将计算完的结果放到一起处理。在TensorFlow中,如果是Betweengraphreplication的情况下,可以通过tf.train.SyncReplicasOptimizer来处理,如果是In-graph replication情况下,直接对结果进行处理即可(比如平均).Asynchronous Training:在异步训练中,每个任务计算完后,就会直接使用计算出的结果更新parameter值。不同的任务之间不存在协调进度。
同步训练需要等待最慢的一个任务执行完后,才可用更新参数;异步训练中,可以每执行完一个任务,就更新一次参数。一般情况下,建议使用异步训练。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Robot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值