Python TensorFlow推理图-加载和恢复变量影响

Python TensorFlow推理图-加载和恢复变量影响,python,tensorflow,Python,Tensorflow,这与许多问题密切相关,包括我自己的一个问题: 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) image

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

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()
问题:

  • 恢复模型和图形就是这样做的…除了我在这里创建一个并行图形,在这里我可能会向图形中添加新的部分。(除了tensorflow图是仅附加的;那么,如果附加了该图,该图如何添加到该图并仅运行该段;它将希望运行整个过程

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

  • logits=Vgg3CIFAR10。推理(图像)是否不会将新项目附加到图形中?如果是因为命名,那么占位符输入是否会替换队列运行器内容

  • 有几个问题的可能答案是:因为我首先定义了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是出现的…显然这只是一堆废话…

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

  • 如果在还原图形之前向图形中添加了任何内容,则还原的图形将附加到已创建的图形中

  • 还原变量在还原与元文件中存储的变量同名的变量时,会在图形中查找变量名。如果创建了具有相同变量名的图形,然后还原了具有相同变量名的图形,则我运行的测试显示了附加的存储图形恢复变量而不是初始图

  • 总之,要注意你对图形所做的事情,并且要非常清楚事物是如何被附加/还原的。如果你希望找到推论,那么看看这个S.O。答案包括创建一个新的图形,并将变量还原到这个新的图形中,这个新的图形实际上是原始图形的一个子图