中,所有的操作对象都打包成对应的,所以如果要使用不同的模型,需要将这些模型加载到不同的模型中,并在使用的时候声明使用哪些,避免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():
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分配出现问题并报错。这一般可以通过模型的加载顺序来解决。
参考:
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容