保存和加载多计算图模型

pre-knowledge

  • ckpt.meta/index/data文件 以及 checkpoint文件

这个ckpt是我们自己给的前缀赋名

.ckpt文件:是旧版本的输出saver.save(sess),相当于你的.ckpt-data
“checkpoint”:文件仅用于告知某些TF函数,这是最新的检查点文件。
.ckpt-meta:包含元图,即计算图的结构,没有变量的值(基本上你可以在tensorboard / graph中看到)。
.ckpt-data:包含所有变量的值,没有结构。
.ckpt-index:可能是内部需要的某种索引来正确映射前两个文件,它通常不是必需的

使用tf.train.Saver保存

(1). save= tf.train.Saver() 是用来保存tensorflow训练模型的,默认保存全部参数 【用来指定保存的变量范围 以及 一些设置】 saver.save()用来设置存储地址、多久保存一次 之类的
(2). 用来加载参数,
注:只加载存储在data中的权重和偏置项等需要训练的参数,其他一律不加载,
包括meta文件中的图

注意无论是参数变量还是计算图 都调用save保存

  • 只想load计算图
tf.train.import_meta_graph(".meta文件")

多计算图的数据隔离

  • tf.global_variables()是各计算图之间隔离的,里面的代码demo也不错的

reference

  • 再看看这个博客:tf.train.Saver() 与tf.train.import_meta_graph区别
  • graph和sess之间的关系
    • 一个graph可以定义多个sess(当然,一个sess也可以跑多个graph)
    • graph只存储节点(Tensor)和control depency
    • sess存储Variable和对应的内存,也就是具体的值。不同sess之间的数据也是相互隔离的(e.g. 对应同一个graph,每个sess运行的时候都要initialize_all_variables一遍,因为变量值都存储在每个sess自身)

      这里要搞清楚的是Tensor只是数据操作(e.g. Add, Matmul),而不是具体的变量(Variable, which 是有具体的值的)

多进程使用多计算图训练踩坑

  • TF hangs when initializing variables in a multi process setting
    里面阐述了为何多进程会hang住,以及处理的两种方法:

    • 修改multiprocessing默认的开启子进程的方式为fork,我已成功尝试(但是需要用py3)

      • 之前我用直接继承Process类的方式去做,失败了。估计也有更改fork方式的API,如果修改了,讲道理也得能成功。
      • mp.set_start_method()要在主模块的if __name__ == '__main__'子句中调用,原因大概可以看这个
    • 在子进程中再导入tf。这篇blog里面在子进程中导入tf成功了,但是我没有成功

  • 起子进程的 simple sample codes:

    for cur_index in range(self.NODE_NUM):# some preparationfather_conn, child_conn = Pipe()sub_proc = Process(target=createAgent,args=(child_conn,cur_index,...,))sub_proc.daemon = True  # 退出主进程的时候紫禁城也会退出,防止泄漏sub_proc.start()# collect father and children conns in order for afterwards operationssub_proces.append(sub_proc)self.par_conns[cur_index] = father_conn
    

    完整版见仓库 fdb0cc2 版本

  • 多计算图之间的隔离 sample codes

    class ChildNet():agent_index = 0def __init__(self, child_conn, dim_state, dim_action, dim_state_g, dim_action_g, act_ind, learning_rate, tau, num_actor_vars, agent_index):  #===gpu_options = tf.GPUOptions(allow_growth=True)self.__sess = tf.Session(graph=tf.Graph(), config=tf.ConfigProto(gpu_options=gpu_options))self.__conn = child_connself.__agent_index = agent_indexwith self.__sess.as_default() as sess:with self.__sess.graph.as_default():  # 这个是必须的!不写的话,会使用默认计算图,而非这个see绑定的计算图with tf.variable_scope(f'critic_{self.__agent_index}', reuse=tf.AUTO_REUSE):self.__inputs, self.__action, self.__out = self.buildNetwork(scope='performance_network')def buildNetwork(self, scope=None):inputs = tf.placeholder(tf.float32, [None, self.__dim_s_g])action = tf.placeholder(tf.float32, [None, self.__dim_a_g])with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):net = inputsnet = tf.contrib.layers.fully_connected(net, 128, activation_fn=tf.nn.leaky_relu)net = tf.contrib.layers.fully_connected(net, 32, activation_fn=tf.nn.leaky_relu)net = tf.contrib.layers.fully_connected(tf.concat([net, action], axis=1), 64, activation_fn=tf.nn.leaky_relu)w_init = tflearn.initializations.uniform(minval=-3e-3, maxval=3e-3)with tf.variable_scope('output', reuse=tf.AUTO_REUSE):out = tf.contrib.layers.fully_connected(net, 1, weights_initializer=w_init, activation_fn=None)return inputs, action, outdef train(self, inputs, action, q_predicted, is_weight):with self.__sess.as_default() as sess:with self.__sess.graph.as_default():return sess.run(...,...,)

    完整版见仓库 fdb0cc2 版本
    请注意如下代码的必要性:

    with self.__sess.as_default() as sess:with self.__sess.graph.as_default():
    

tensorflow 多计算图并行(使用mp多进程) sessgraph相关推荐

  1. 快手八卦!突破TensorFlow、PyTorch并行瓶颈的开源分布式训练框架来了!

    来源:AI前线本文约5200字,建议阅读8分钟 本文介绍了专门针对分布式场景设计了特定的优化算法同比,性能较同类提升60%. 近日,快手和苏黎世理工宣布开源分布式训练框架 Bagua(八卦),相比于 ...

  2. tensorflow 多gpu 并行训练

    多卡训练模式 进行深度学习模型训练的时候,一般使用GPU来进行加速,当训练样本只有百万级别的时候,单卡GPU通常就能满足我们的需求,但是当训练样本量达到上千万,上亿级别之后,单卡训练耗时很长,这个时候 ...

  3. 线程VS进程,多线程VS多进程,并行VS并发,单核cpuVS多核cpu

    目录 概论 进程VS线程 并发VS并行 多线程VS多进程 总结 概论 程序是为完成特定任务.用某种语言编写的组指令的集合.即指一段静态的代码,静态对象. 进程是程序的次执行过程, 或是正在运行的 一个 ...

  4. linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...

    并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Wi ...

  5. Python中的多进程并行简明教程

    1. 什么是多进程并行 一般来说,多进程意味着并行运行两个或者多个任务.在Python中我们可以使用python内置的multiprocessing模块来实现这一功能. 我们来举个栗子,假设我们需要运 ...

  6. 如何像用MNIST一样来用ImageNet?这里有一份加速TensorFlow分布式训练的梯度压缩指南

    作者 | 王佐 今年的 NIPS 出现 "Imagenet is the new MNIST" 口号,宣告使用 MNIST 数据集检验网络模型性能已经成为过去式.算法工程师们早就意 ...

  7. 重要更新 | 谷歌发布 TensorFlow 1.4,迁移Keras,支持分布式训练

    TensorFlow 1.4 版现在已公开发布 - 这是一个大更新!我们在这里非常高兴地宣布一些令人兴奋的新功能,希望大家喜欢. Keras 在 1.4 版中,Keras 已从 tf.contrib. ...

  8. 始于TensorFlow ,终于PyTorch

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | Scott Carey 译者 | Sambodhi 策划 ...

  9. 中tile函数_HelpGirlFriend 系列 --- tensorflow 中的张量运算思想

    GirlFriend 在复现论文的时候,我发现她不太会将通用数学公式转化为张量运算公式,导致 tensorflow 无法通过并行的方式优化其论文复现代码的运行速率. 这里对给 GirlFriend 讲 ...

最新文章

  1. transact-sql数组(转)
  2. 巨头纷纷看上的中国Robobus又获1亿美元投资
  3. leetcode算法题--数字序列中某一位的数字
  4. 运维角度浅谈MySQL数据库优化(转自:2018-03-10 李振良 JAVA高级架构)
  5. 每日求一录~20170704
  6. 实战演习-用wse上传下载文件
  7. 一个银行客户经理的“变形记”
  8. 栈和队列之栈的定义和实现
  9. VMware虚拟机安装 windows server 2012 SQL server2012
  10. 181101新闻:午后阳光下集思广益,课例研修尝试与挑战并存
  11. WebView·开车指南
  12. lincese oracle_关于Oracle数据库企业版的license价格
  13. CYQ.Data V5 分布式自动化缓存设计介绍
  14. 对文件夹下的文件及文件夹进行排序
  15. endnote设置文献第二行悬挂缩进办法
  16. 解决方案:yarn 出现error An unexpected error occurred错误的解决办法
  17. bresenham算法画圆c语言,bresenham画圆算法
  18. 构建高可用的方式总结
  19. 微信群聊,为什么人数上限500人?
  20. 【VRP问题】基于NSGA算法求解多中心VRP问题

热门文章

  1. 用python写脚本测试_用python写测试脚本永久费苹果
  2. [转贴]一个老程序员的心里话
  3. 网关--实现终端定位和信息交互的中间件
  4. 三星即将完成android更新,三星Galaxy S9系列手机即将推送Android 10操作系统升级
  5. 魅蓝note3联通卡显示无服务器,魅蓝Note3手机卡(SIM卡)安装方法真机图文详解
  6. 抱薪者说 | 拯救被盗 FC,神秘组织在行动
  7. List中循环删除元素
  8. 将爱心代码设为电脑屏保,俘获少女芳心,还能假装黑客大佬,在酷炫的界面中保护隐私
  9. QQ微信头像自动采集网站PHP源码
  10. XMind思维导图软件和常用快捷键