【发布时间】: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()
问题:
恢复模型和图表就是这样做的...除了我在这里创建一个平行图表,我可能在图表中添加新部分。 (除了 tensorflow 图只追加;那么,如果它被追加,它如何添加到图中并只运行该段;它会想要运行整个事情。
已加载图表中存在的队列运行器会发生什么情况;所有这些操作都已加载。通过打印 sess.graph.get_operations() 你可以看到所有旧的输入操作都在那里。
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