tensorflow加载多个计算图的冲突解决

需求:顺序加载多个计算图时,会导致第二个计算图后变量  不可用,在程序初始化中解决该问题(一下代码没有做优化,请读者自行修正)

复制代码
class BertEncoder(object):
    """ model
    """
    def __init__(self, OUTPUT_GRAPH, OUT_TENSOR):
        self.max_length = 30
        self.tokenizer = TOKENIZER
        self.out_graph = os.path.join(CURRENT_DIR, "pb_model", OUTPUT_GRAPH)
        self.out_tensor = OUT_TENSOR
        self.model_graph = {}
        graph = tf.Graph()
        with graph.as_default():
            self.model_graph['output_graph_def'] = tf.compat.v1.GraphDef()
            with open(self.out_graph, "rb") as f:
                self.model_graph['output_graph_def'].ParseFromString(f.read())
            self.model_graph['sess'] = tf.Session(graph=graph)
        with self.model_graph['sess'].as_default():
            with graph.as_default():
                self.model_graph['sess'].run(tf.compat.v1.global_variables_initializer())
                tf.import_graph_def(self.model_graph['output_graph_def'], name="")
                self.input_ids_p = self.model_graph['sess'].graph.get_tensor_by_name("input_ids:0")
                self.input_mask_p = self.model_graph['sess'].graph.get_tensor_by_name("input_mask:0")
                self.output_tensor = self.model_graph['sess'].graph.get_tensor_by_name(self.out_tensor)


    def predict(self, to_predict):
        """pb predict
        """
        sentence = [each.lower() for each in to_predict]
        input_ids, input_mask, = self.convert(sentence)
        feed_dict = {self.input_ids_p: input_ids,
                     self.input_mask_p: input_mask}
        sess = self.model_graph['sess']
        output_emb = sess.run(self.output_tensor, feed_dict)
        return output_emb
复制代码

 

posted @   今夜无风  阅读(187)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示