Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow:在当前模型中,因损失而预先训练的正向传递_Python_Tensorflow_Loss Function_Pre Trained Model - Fatal编程技术网

Python TensorFlow:在当前模型中,因损失而预先训练的正向传递

Python TensorFlow:在当前模型中,因损失而预先训练的正向传递,python,tensorflow,loss-function,pre-trained-model,Python,Tensorflow,Loss Function,Pre Trained Model,我试图使用在tensorflow中实现的预训练FaceNet模型,以便在当前模型的输出上运行正向传递,从而在当前模型上产生新的损失。我不想在FaceNet模型中训练权重,因此我将在某个时候利用tf.stop\u gradient() 为了在我的当前图表中添加一个前向传递,我正在导入整个模型结构,使用network=importlib.import\u模块(models.inception\u resnet\u v1))或多或少地遵循在链接中找到的预训练网络上的训练方案。因此,在我当前的模型结构中

我试图使用在tensorflow中实现的预训练FaceNet模型,以便在当前模型的输出上运行正向传递,从而在当前模型上产生新的损失。我不想在FaceNet模型中训练权重,因此我将在某个时候利用
tf.stop\u gradient()

为了在我的当前图表中添加一个前向传递,我正在导入整个模型结构,使用
network=importlib.import\u模块(models.inception\u resnet\u v1))
或多或少地遵循在链接中找到的预训练网络上的训练方案。因此,在我当前的模型结构中,我添加了如下内容:

network = importlib.import_module("models.inception_resnet_v1")
# set model_dir to where the ckpt file is
self.pretrained_model = os.path.expanduser(self.model_dir)
... previous model structure
然后,通过查看生成数据的L2和通过facenet推断
network.inference()传递的真实数据,我添加了新的损失函数:

然后在训练中我打电话给你

saver = tf.train.Saver()
sess=tf.Session()

with sess.as_default():
    saver.restore(sess, self.pretrained_model)
    sess.run(tf.global_variables_initializer())
然而,我得到了很多这样的输出

W tensorflow/core/framework/op_kernel.cc:993] Data loss: Unable to open table file /data/models/20170512-110547/model-20170512-110547.ckpt-250000.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
我只找到了一种方法来导入经过训练的模型并在会话中调用张量。我需要使用类似于
network.inference(data,…)
的东西直接添加到我的模型结构中。我确信我遗漏了一些明显的东西,但我找不到任何这样的例子。我猜我的问题是:

  • 我导入了错误的模型文件 或
  • 我没有在
    网络中指定需要恢复的特定变量
  • 有什么办法吗

    澄清:

  • 我使用的是TF1.0版本
  • 我正在使用我下载的ckpt文件
  • 事实证明,我需要指定网络中需要恢复的特定变量

     fn_saver = tf.train.Saver(tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                 scope='InceptionResnetV1'))
    

    保存程序需要指定变量,以便指向要恢复的权重。否则,我认为默认情况下,我试图为要训练的模型找到所有可训练的可变权重,但我只需要恢复单个模型

    (1)澄清一下,是加载预先训练的检查点导致了此错误,还是您编写的检查点?(2) 涉及到哪些TensorFlow版本?@AllenLavoie,我做了澄清。我想我明白了。我需要指定哪些变量需要恢复,否则saver.restore函数无法找到所有可训练变量的权重,包括要训练的主模型。(1)澄清一下,是加载预先训练的检查点导致此错误,还是您编写的检查点?(2) 涉及到哪些TensorFlow版本?@AllenLavoie,我做了澄清。我想我明白了。我需要指定需要恢复哪些变量,否则saver.restore函数无法找到所有可训练变量的权重,包括要训练的主模型。
     fn_saver = tf.train.Saver(tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
                                 scope='InceptionResnetV1'))