import_meta_graph 和 replicate_model_fn

replicate_model_fn现在已被弃用,但是项目中的代码还是用到了这个函数

目前的项目需要用import_meta_graph的方式进行建图,然后finetune

问题出现了,在restore的时候会产生错误
Key tower_1/ssd1200/additional_layers/conv10/conv10_1/bias not found in checkpoint
这是因为replicate_model_fn会对每一个GPU新建一套和原来一模一样的图(调用model_fn的建图代码),如何放在name_scope为tower_?下,但是这些不同的tower会共享weights,因为他们是在variable_scope的reuse=tf.AUTO_REUSE下新建的,所以名字一样的会reuse:可以看到在pbtxt中input为"ssd1200/conv1/conv1_1/kernel/read",变量共享

node {
    name: "tower_1/ssd1200/conv1/conv1_1/Conv2D"
    op: "Conv2D"
    input: "split_inputs/split:1"
    input: "ssd1200/conv1/conv1_1/kernel/read"
    device: "/device:GPU:1"
    attr {
         key: "T"
         value {
           type: DT_FLOAT
     }
}

但是当用import_meta_graph替换掉代码建图后,reuse始终是false,也就是不会共享变量,所以是完全复制了一个计算图,所以新建的图的variable在checkpoint中是找不到的:改用import_meta_graph后,再用replicate_model_fn后,新建的图的input并未共享,而是一个新的,所以在restore的时候肯定找不到

node {
    name: "tower_1/ssd1200/conv1/conv1_1/Conv2D"
    op: "Conv2D"
    input: "split_inputs/split:1"
    input: "tower_1/ssd1200/conv1/conv1_1/kernel/read"
    device: "/device:GPU:1"
    attr {
         key: "T"
         value {
         type: DT_FLOAT
    }
}

参考资料: https://github.com/tensorflow/tensorflow/issues/20140

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值