【问题标题】:TensorFlow Inference Graph - Loading and Restoring Variables impactTensorFlow 推理图 - 加载和恢复变量的影响
【发布时间】:2023-03-13 23:17:01
【问题描述】:

这与很多问题密切相关,包括我自己的一个问题:TensorFlow Inference

TensorFlow 中用于推理的每个样本似乎都遵循这种形式:

import tensorflow as tf
import CONSTANTS
import Vgg3CIFAR10
import numpy as np

MODEL_PATH = 'models/' + CONSTANTS.MODEL_NAME + '.model'
rand = np.random.rand(1, 32, 32, 3).astype(np.float32)

images = tf.placeholder(tf.float32, shape=(1, 32, 32, 3))

logits = Vgg3CIFAR10.inference(images)

def run_inference():
    '''Runs inference against a loaded model'''
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        new_saver = tf.train.import_meta_graph(MODEL_PATH + '.meta')
        new_saver.restore(sess, MODEL_PATH)
        print(sess.run(logits, feed_dict={images : rand}))
        print('done')

run_inference()

问题:

  1. 恢复模型和图表就是这样做的...除了我在这里创建一个平行图表,我可能在图表中添加新部分。 (除了 tensorflow 图只追加;那么,如果它被追加,它如何添加到图中并只运行该段;它会想要运行整个事情。

  2. 已加载图表中存在的队列运行器会发生什么情况;所有这些操作都已加载。通过打印 sess.graph.get_operations() 你可以看到所有旧的输入操作都在那里。

  3. logits = Vgg3CIFAR10.inference(images) 是否不会将新项目添加到图表中?如果是因为命名;那么占位符输入会取代队列运行器的东西吗?

几个项目的可能答案:因为我首先定义了 logits op;这意味着该图的其余部分在那之后被附加;并通过一些 tensorflow 魔术酱将原始图中的变量恢复到图的 logits 部分?

所以我对此进行了测试;而且它甚至不能正常工作......

它首先使用 logits 创建一个图,然后将旧图附加到该图。因此,当您调用推理时;你只是得到一堆垃圾回来......

[[ 0.09815982 0.09611271 0.10542709 0.10383813 0.0955615 0.10979554 0.12138291 0.09316944 0.08336139 0.09319157]]

[[ 0.10305423 0.092167 0.10572157 0.10368075 0.1043573 0.10057402 0.12435613 0.08916584 0.07929172 0.09763144]]

[[ 0.1068181 0.09361464 0.10377798 0.10060066 0.10110897 0.09462726 0.11688241 0.09941135 0.0869903 0.09616835]]

在这里,我预计节点 8,然后是节点 2 和 2 将浮出水面......显然它只是一堆什么都没有......

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    所以经过大量审查后,这就是发生的事情......

    1. 如果在恢复图表之前向图表添加任何内容;恢复的图会附加到已经创建的图上。

    2. 在恢复与元文件中存储的变量同名的变量时,恢复变量会在图表中查找变量名称。如果您创建了一个具有相同变量名的图,然后恢复了一个也具有相同变量名的图,我运行的测试显示附加的存储图接收了变量的恢复,而不是初始图。

    总结一下;小心你对图表所做的事情,并非常清楚事情是如何被追加/恢复的。如果您正在查看此内容以希望找到推论;然后看看这个 S.O.答案涉及创建一个新图并将变量恢复到该新图,该新图实际上是原始图的子图。

    TensorFlow Inference

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2023-03-04
      相关资源
      最近更新 更多