Tensorflow同时加载使用多个模型

中,所有的操作对象都打包成对应的,所以如果要使用不同的模型,需要将这些模型加载到不同的模型中,并在使用的时候声明使用哪些,避免due to and want使用。模型不匹配导致的错误。使用多个图时,需要为每个图使用不同的图,但每个图也可以在多个图中使用。这时候需要显式声明每次使用时用到的图。

g1 = tf.Graph() # 加载到Session 1的graph
g2 = tf.Graph() # 加载到Session 2的graph
sess1 = tf.Session(graph=g1) # Session1
sess2 = tf.Session(graph=g2) # Session2
# 加载第一个模型

with sess1.as_default(): 
    with g1.as_default():
        tf.global_variables_initializer().run()
        model_saver = tf.train.Saver(tf.global_variables())
        model_ckpt = tf.train.get_checkpoint_state(“model1/save/path”)
        model_saver.restore(sess, model_ckpt.model_checkpoint_path)

# 加载第二个模型
with sess2.as_default():  # 1
    with g2.as_default():  
        tf.global_variables_initializer().run()
        model_saver = tf.train.Saver(tf.global_variables())
        model_ckpt = tf.train.get_checkpoint_state(“model2/save/path”)

        model_saver.restore(sess, model_ckpt.model_checkpoint_path)
...
# 使用的时候
with sess1.as_default():

图片[1]-Tensorflow同时加载使用多个模型-唐朝资源网

with sess1.graph.as_default(): # 2 ... with sess2.as_default(): with sess2.graph.as_default(): ... # 关闭sess sess1.close() sess2.close()

注意:1、在1处使用,这样离开时不关闭,以后可以继续使用,直到手动关闭; 2、因为有多个图,sess.graph和tf一样。值不相等,所以进入sess时,sess.graph.()必须显式声明sess.graph为当前默认图,否则会报错。

PS:加载不同框架(tf、caffe、torch等)的模型很可能会导致底层cuDNN分配出现问题并报错。这一般可以通过模型的加载顺序来解决。

参考:

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片