当前位置: 首页 > 面试题库 >

恢复Tensorflow中的变量子集

白泽语
2023-03-14
问题内容

我正在张量流中训练一个生成对抗网络(GAN),基本上我们有两个不同的网络,每个网络都有自己的优化器。

self.G, self.layer = self.generator(self.inputCT,batch_size_tf)
self.D, self.D_logits = self.discriminator(self.GT_1hot)

...

self.g_optim = tf.train.MomentumOptimizer(self.learning_rate_tensor, 0.9).minimize(self.g_loss, global_step=self.global_step)

self.d_optim = tf.train.AdamOptimizer(self.learning_rate, beta1=0.5) \
                      .minimize(self.d_loss, var_list=self.d_vars)

问题是我先训练一个网络(g),然后再一起训练g和d。但是,当我调用load函数时:

self.sess.run(tf.initialize_all_variables())
self.sess.graph.finalize()

self.load(self.checkpoint_dir)

def load(self, checkpoint_dir):
    print(" [*] Reading checkpoints...")

    ckpt = tf.train.get_checkpoint_state(checkpoint_dir)
    if ckpt and ckpt.model_checkpoint_path:
        ckpt_name = os.path.basename(ckpt.model_checkpoint_path)
        self.saver.restore(self.sess, ckpt.model_checkpoint_path)
        return True
    else:
        return False

我有这样的错误(回溯很多):

Tensor name "beta2_power" not found in checkpoint files checkpoint/MR2CT.model-96000

我可以恢复g网络并继续使用该功能进行训练,但是当我想从头开始盯着d并从存储的模型中盯着g时,我会遇到该错误。


问题答案:

要还原变量的子集,您必须创建一个新tf.train.Saver变量并将变量的特定列表传递给它,以便在可选var_list参数中进行还原。

默认情况下,atf.train.Saver将创建操作,该操作(i)在调用时保存图形中的每个变量,saver.save()并且(ii)在调用时在给定检查点中(按名称)查找每个变量saver.restore()。虽然这适用于大多数常见方案,但您必须提供更多信息才能使用变量的特定子集:

  1. 如果只想还原变量的子集,则可以通过调用来获得这些变量的列表tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=G_NETWORK_PREFIX),并假设您将“ g”网络放置在公共with tf.name_scope(G_NETWORK_PREFIX):tf.variable_scope(G_NETWORK_PREFIX):块中。然后,您可以将此列表传递给tf.train.Saver构造函数。

  2. 如果要还原变量的子集和/或它们在检查点中的变量具有 不同的名称 ,则可以传递字典作为var_list参数。默认情况下,检查点中的每个变量都与一个 key 相关联, key 是其tf.Variable.name属性的值。如果目标图中的名称不同(例如,由于添加了作用域前缀),则可以指定一个字典,该字典将字符串键(在检查点文件中)映射到tf.Variable对象(在目标图中)。



 类似资料:
  • 问题内容: 我正在尝试恢复TensorFlow模型。我遵循以下示例:http : //nasdag.github.io/blog/2016/01/19/classifying-bees-with-google- tensorflow/ 在示例的代码末尾,我添加了以下几行: 创建了两个文件:checkpoint和model.ckpt。 在一个新的python文件(tomas_bees_predict

  • 问题内容: 我是tensorflow的新手,我无法理解变量和常量的区别,我知道我们将变量用于方程式,将常量用于直接值,但是为什么代码#1仅工作,为什么代码#2和# 3,请说明在哪种情况下我们必须先运行图形(a),然后运行变量(b),即 在这种情况下,我可以直接执行此命令,即 代码1: 代码2: 代码3: 问题答案: 在TensorFlow中,常量和变量之间的区别在于,当您声明某个常量时,其值以后将

  • 从这里开始 与tf. Variable不同,tf. ResourceVariable具有明确定义的语义学。在TensorFlow图中,ResourceVariable的每次使用都会向图添加一个read_value操作。read_value操作返回的Tensors保证可以看到read_value依赖的任何操作(直接、间接或通过控件依赖)中发生的对变量值的所有修改,并且保证不会看到对read_valu

  • 我想使用我的神经网络,而不需要再次训练网络。我读到关于 现在我在文件夹中有3个文件:检查点、model.ckpt和model.ckpt.meta 我想在python的另一个类中恢复数据,得到我的神经网络的权重,并进行一次预测。 我该怎么做呢?

  • 在TensorFlow中训练模型后: 如何保存已训练的模型? 以后如何还原此保存的模型?

  • 问题内容: 在中训练模型后: 你如何保存经过训练的模型? 以后如何恢复此保存的模型? 问题答案: 从文档: 保存 这仍然是测试版,因此我建议不要使用。如果你仍然想走那条路,这里是tf.saved_model使用指南 Tensorflow <2 simple_save 为了完整起见,我给出了很多好答案,我将加2美分:。也是使用 的独立代码示例。 恢复: 独立示例 为了演示,以下代码生成随机数据。 我