Python 如何在tensorflow中恢复多个模型并将其平均?

Python 如何在tensorflow中恢复多个模型并将其平均?,python,tensorflow,Python,Tensorflow,我分别训练了两个模型,我想加载它们的变量并求平均值。但是tf.get_默认图出错了 这是我的代码结构,我知道它是错误的,但如何正确编写 sess = tf.session() saver_one = tf.train.import_meta_graph('./model1.ckpt.meta') saver_one.restore(sess,'./model1.ckpt') graph_one = tf.get_default_graph() wc1 = graph_one.get_tensor

我分别训练了两个模型,我想加载它们的变量并求平均值。但是tf.get_默认图出错了

这是我的代码结构,我知道它是错误的,但如何正确编写

sess = tf.session()
saver_one = tf.train.import_meta_graph('./model1.ckpt.meta')
saver_one.restore(sess,'./model1.ckpt')
graph_one = tf.get_default_graph()
wc1 = graph_one.get_tensor_by_name('wc1:0')
……
saver_two = tf.train.import_meta_graph('./model2.ckpt.meta')
saver_two.restore(sess,'./model2.ckpt')
graph_two = tf.get_default_graph()
wc1_two = graph_two.get_tensor_by_name('wc1:0')
……
错误是:

回溯最近一次呼叫上次: 文件/home/dan/Documents/deep prior master/src/ESB_ICVL_TEST_ALL.py,第143行,in saver\u two.restoresess'。/cache/cnn\u shall/model2.ckpt' 文件/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py,第1548行,在restore中 {self.saver\u def.filename\u tensor\u name:save\u path} 文件/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py,第789行,正在运行 运行\u元数据\u ptr 文件/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py,第997行,正在运行 feed_dict_字符串、选项、运行元数据 文件/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py,第1132行,in_do_run 目标\u列表、选项、运行\u元数据 文件/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py,第1152行,在 升起类型ENODE_def,op,消息 tensorflow.python.framework.errors\u impl.InvalidArgumentError:Assign要求两个张量的形状匹配。左侧形状=[27]右侧形状=[9] [[Node:save/Assign\u 6=Assign[T=DT\u FLOAT,\u class=[lock:@outb],use\u locking=true,validate\u shape=true,\u device=/job:localhost/replica:0/task:0/gpu:0]outb,save/RestoreV2\u 6/\u 1]]
您试图覆盖图形,但它遇到了不匹配的情况,某些维度不匹配。也许最好把它们分开

graph_one = tf.Graph()
with graph_one.as_default():
  session_one = tf.Session()
  with session_one.as_default():
    saver_one = tf.train.import_meta_graph('./model1.ckpt.meta')
    wc1_one_value = session_one.run([graph_one.get_tensor_by_name('wc1:0')])

# Similar for graph_two
...

print (wc1_one_value + wc1_two_value) / 2  # Or whatever you want
要将它们分配回会话,请构造图,然后执行tf.assign操作

with graph_one.as_default(), session_one.as_default():
   session_one.run([tf.assign(<variable>, (wc1_one_value + wc1_two_value) / 2 )])
要获取变量,可以使用get_trainable_变量,或使用reuse=True再次定义它。
然后再次导出模型。

哪一行有错误?你能发布完整的堆栈跟踪吗?