Python TensorFlow:加载模型,在图像上向前传递

Python TensorFlow:加载模型,在图像上向前传递,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,是否可以加载我的模型,只需对图像执行一次正向操作 我的网络定义如下: def network(x, weights, biases, name="network"): # 1. Hidden layer, ReLU layer_1 = tf.add(tf.matmul(x, weights["h1"]), biases["b1"]) layer_1 = tf.nn.relu(layer_1) # 2. Hidden layer, ReLU layer_2

是否可以加载我的模型,只需对图像执行一次正向操作

我的网络定义如下:

def network(x, weights, biases, name="network"):
    # 1. Hidden layer, ReLU
    layer_1 = tf.add(tf.matmul(x, weights["h1"]), biases["b1"])
    layer_1 = tf.nn.relu(layer_1)

    # 2. Hidden layer, ReLU
    layer_2 = tf.add(tf.matmul(layer_1, weights["h2"]), biases["b2"])
    layer_2 = tf.nn.relu(layer_2)

    # Output layer with linear activation
    out_layer = tf.add(tf.matmul(layer_2, weights["out"]), biases["bout"])
    return out_layer

pred = network(x, weights, biases, name="network")
我被困在尝试:

import tensorflow as tf
import numpy as np

test_image = np.random.randn(900,1)

with tf.Session() as sess:
    saver = tf.train.import_meta_graph("my_model.meta")
    saver.restore(sess, tf.train.latest_checkpoint("/dir/to/model"))
    op_to_restore = graph.get_tensor_by_name("network:0")
执行此操作时,会出现以下错误:

KeyError: "The name 'network:0' refers to a Tensor which does not exist. The operation, 'network', does not exist in the graph."

但是我该如何继续呢?

您需要知道输出节点的名称,该节点给出了预测,而输入节点则提供了数据

然后,您可以在会话中运行输出节点,并使用输入节点的提要dict来提要输入图像。比如:

model_result = sess.run(output_node , feed_dict ={input_node : test_image})
编辑: 您尚未为ops命名,因此Tensorflow将为其命名默认名称。出现错误是因为网络:0不是Tensorflow图中任何张量的名称

您可以使用“name=place\u your\u name\u here”作为您正在定义的操作的参数,将名称添加到操作中,例如

tf.add(tf.matmul(layer_2, weights["out"]), biases["bout"], name='output')

您需要知道提供预测的输出节点的名称,以及提供数据的输入节点的名称

然后,您可以在会话中运行输出节点,并使用输入节点的提要dict来提要输入图像。比如:

model_result = sess.run(output_node , feed_dict ={input_node : test_image})
编辑: 您尚未为ops命名,因此Tensorflow将为其命名默认名称。出现错误是因为网络:0不是Tensorflow图中任何张量的名称

您可以使用“name=place\u your\u name\u here”作为您正在定义的操作的参数,将名称添加到操作中,例如

tf.add(tf.matmul(layer_2, weights["out"]), biases["bout"], name='output')

定义模型时,需要定义图形。此图包含操作节点,每个节点都有一个唯一的名称

如果没有显式地为节点设置名称,Tensorflow会为您指定一个名称

如果要执行计算节点所需的操作链,必须知道其名称

在您的情况下,您必须找到out_层的名称。您可以使用property.name访问其名称

保存此名称

现在,您可以像以前一样恢复图形,并且可以在图形中查找正确的名称:

graph.get_tensor_by_name(name)

其中name是上面执行的printname返回的字符串。

定义模型时,定义一个图形。此图包含操作节点,每个节点都有一个唯一的名称

如果没有显式地为节点设置名称,Tensorflow会为您指定一个名称

如果要执行计算节点所需的操作链,必须知道其名称

在您的情况下,您必须找到out_层的名称。您可以使用property.name访问其名称

保存此名称

现在,您可以像以前一样恢复图形,并且可以在图形中查找正确的名称:

graph.get_tensor_by_name(name)

其中name是上面执行的printname返回的字符串。

它仍然不知道该做什么。这有点难,因为我刚刚开始使用TensorFlow。我在问题中补充了一些细节。也许我的问题现在更容易理解了。我尝试过使用etworkx、权重、偏差、name=network,但我无法通过restore=graph.get\u tensor\u by\u namenetwork访问它。你能告诉我我的错误在哪里吗?你的网络函数没有将你传入的名称分配给函数中的任何操作。您需要将名称指定给tensorflow操作(如我编辑的答案中的操作),才能按名称访问该操作。它仍然不知道该做什么。这有点难,因为我刚刚开始使用TensorFlow。我在问题中补充了一些细节。也许我的问题现在更容易理解了。我尝试过使用etworkx、权重、偏差、name=network,但我无法通过restore=graph.get\u tensor\u by\u namenetwork访问它。你能告诉我我的错误在哪里吗?你的网络函数没有将你传入的名称分配给函数中的任何操作。您需要将名称指定给tensorflow操作(如我编辑的答案中的操作),才能按名称访问操作。谢谢您的回答!当我这样做并打印操作的名称时,我得到的是Add_3:0,而不是我标记的网络。为什么会这样?pred的名称必须是network吗?您只需将'name'参数传递给tf.add节点定义,就可以得到答案!当我这样做并打印操作的名称时,我得到的是Add_3:0,而不是我标记的网络。为什么会这样?pred的名称为network需要什么?只需将'name'参数传递给tf.add节点定义,就完成了