【发布时间】:2016-08-26 23:31:30
【问题描述】:
我想做的是同时运行多个预训练的 Tensorflow 网络。因为每个网络内部的一些变量的名称可以相同,所以常见的解决方案是在创建网络时使用名称范围。但是,问题是我已经训练了这些模型并将训练后的变量保存在几个检查点文件中。在创建网络时使用名称范围后,我无法从检查点文件加载变量。
例如,我训练了一个 AlexNet,我想比较两组变量,一组来自 epoch 10(保存在文件 epoch_10.ckpt),另一组来自 epoch 50(保存在文件 epoch_50.ckpt)。因为这两个是完全一样的net,所以里面的变量名是一样的。我可以使用创建两个网络
with tf.name_scope("net1"):
net1 = CreateAlexNet()
with tf.name_scope("net2"):
net2 = CreateAlexNet()
但是,我无法从 .ckpt 文件加载经过训练的变量,因为当我训练这个网络时,我没有使用名称范围。尽管我可以在训练网络时将名称范围设置为“net1”,但这会阻止我加载 net2 的变量。
我试过了:
with tf.name_scope("net1"):
mySaver.restore(sess, 'epoch_10.ckpt')
with tf.name_scope("net2"):
mySaver.restore(sess, 'epoch_50.ckpt')
这不起作用。
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: python tensorflow