Python 如何在tensorflow中恢复多个模型并将其平均?
我分别训练了两个模型,我想加载它们的变量并求平均值。但是tf.get_默认图出错了 这是我的代码结构,我知道它是错误的,但如何正确编写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
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再次定义它。
然后再次导出模型。哪一行有错误?你能发布完整的堆栈跟踪吗?