Python 将多个MetagraphDef导入单个图形并还原变量

Python 将多个MetagraphDef导入单个图形并还原变量,python,tensorflow,Python,Tensorflow,类似的问题,但是使用tf.train.import\u meta\u graph()接口 我的代码: with self.graph.as_default(), tf.device(device): with tf.Session(graph=self.graph, config=self.tf_config) as sess: # Add inherited graphs to CenterNet's graph. se

类似的问题,但是使用tf.train.import\u meta\u graph()接口

我的代码:

    with self.graph.as_default(), tf.device(device):
        with tf.Session(graph=self.graph, config=self.tf_config) as sess:

            # Add inherited graphs to CenterNet's graph.
            self.mm_saver = tf.train.import_meta_graph(self.maskmaker.model_ckpt + ".meta")
            self.dv_saver = tf.train.import_meta_graph(self.deepvar.model_ckpt + ".meta")

            # First saver can restore
            self.mm_saver.restore(sess, self.maskmaker.model_ckpt)
            # Second saver raises an exception
            self.dv_saver.restore(sess, self.deepvar.model_ckpt)
异常(没有回溯,非常长)

看起来DVU保护程序正在尝试恢复图形上的所有变量,而不仅仅是它自己的变量。失败的关键“分类器/偏差”最初是mm图形的一部分


如何限制它恢复自己的密钥?

已解决!该保存程序将操作添加到图形中,由于两个保存程序位于同一个名称\u范围内,因此它们相互干扰。您需要将每个调用包装起来,以便在其自己的名称\u范围内导入\u元\u图:

with self.graph.as_default(), tf.device(device):
    with tf.Session(graph=self.graph, config=self.tf_config) as sess:

        # Add inherited graphs to CenterNet's graph.
        with tf.name_scope(self.maskmaker.name):
            self.mm_saver = tf.train.import_meta_graph(self.maskmaker.model_ckpt + ".meta")
        with tf.name_scope(self.deepvar.name):
            self.dv_saver = tf.train.import_meta_graph(self.deepvar.model_ckpt + ".meta")

        # First saver can restore
        self.mm_saver.restore(sess, self.maskmaker.model_ckpt)
        # Second saver can also restore
        self.dv_saver.restore(sess, self.deepvar.model_ckpt)

解决了!该保存程序将操作添加到图形中,由于两个保存程序位于同一个名称\u范围内,因此它们相互干扰。您需要将每个调用包装起来,以便在其自己的名称\u范围内导入\u元\u图:

with self.graph.as_default(), tf.device(device):
    with tf.Session(graph=self.graph, config=self.tf_config) as sess:

        # Add inherited graphs to CenterNet's graph.
        with tf.name_scope(self.maskmaker.name):
            self.mm_saver = tf.train.import_meta_graph(self.maskmaker.model_ckpt + ".meta")
        with tf.name_scope(self.deepvar.name):
            self.dv_saver = tf.train.import_meta_graph(self.deepvar.model_ckpt + ".meta")

        # First saver can restore
        self.mm_saver.restore(sess, self.maskmaker.model_ckpt)
        # Second saver can also restore
        self.dv_saver.restore(sess, self.deepvar.model_ckpt)

作用域名称也可以作为参数直接传递到import_meta_graph()。作用域名称也可以作为参数直接传递到import_meta_graph()。