诗人的张量流:“名称'导入/输入'是指不在图表中的操作。”

时间:2017-09-20 15:13:03

标签: python machine-learning tensorflow

我正在关注诗人的codelabs tensorflow并且训练工作正常但是当我运行脚本来评估图像时:

python -m scripts.label_image \
    --graph=tf_files/retrained_graph.pb  \
    --image=tf_files/flower_photos/daisy/21652746_cc379e0eea_m.jpg

我收到以下错误:

The name 'import/input' refers to an Operation not in the graph.

我环顾四周,它与选择输入和输出层有关,脚本label_image.py将'input'和'output'设置为默认值。我正在使用的架构是'inception_v3'。

11 个答案:

答案 0 :(得分:14)

我更改了〜/ scripts / label_image.py 第77行并且它有效:

来自

input_layer = "input"

input_layer = "Mul"

答案 1 :(得分:8)

使用--input_layer名称作为占位符。它可以工作,因为retrain.py脚本已将input_layer的默认值设置为“占位符”。

    python label_image.py 
          --graph=retrained_graph.pb 
          --labels=retrained_labels.txt 
          --output_layer=final_result 
          --image=testimage654165.jpg 
          --input_layer=Placeholder

答案 2 :(得分:6)

并非每个人都会收到此错误。我猜你是否使用了除MobileNet之外的任何其他架构,这个错误就会出现。 在label_image.py文件中 将值更改为:

input_height = 299
input_width = 299
input_layer = "Mul"

这应该解决它。

答案 3 :(得分:2)

正如@Mimii和@Celio所提到的:更改〜/ scripts / label_image.py,在行input_layer = "input"input_layer = "Mul" AND 更改输入维度:{{1 }和input_height = 299

答案 4 :(得分:1)

使用此

curl -LO https://github.com/tensorflow/tensorflow/raw/master/tensorflow/examples/label_image/label_image.py
python label_image.py \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--input_layer=Placeholder \
--output_layer=final_result \
--image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg

答案 5 :(得分:0)

您应该添加--output_layer=final_result:0作为参数。

Final call is : python -m scripts.label_image \
--graph=tf_files/retrained_graph.pb  \
--output_layer=final_result:0 \
--image=tf_files/flower_photos/daisy/21652746_cc379e0eea_m.jpg

答案 6 :(得分:0)

对不起,迟到了。 我使用重新训练的模型在下面运行python脚本。你能试试这个吗?

要求: labels.txt和output.pb(重新训练的模型)应与我的python scipt位于同一目录。 将下面的代码保存为test.py 并将其命名为: python test.py xxx.jpg

import sys
import tensorflow as tf


image_path = sys.argv[1]


image_data = tf.gfile.FastGFile(image_path, 'rb').read()


label_lines = [line.rstrip() for line
                   in tf.gfile.GFile("./labels.txt")]


with tf.gfile.FastGFile("./output.pb", 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    _ = tf.import_graph_def(graph_def, name='')

with tf.Session() as sess:



    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')

    predictions = sess.run(softmax_tensor, \
             {'DecodeJpeg/contents:0': image_data})


    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]

    for node_id in top_k:
        human_string = label_lines[node_id]
        score = predictions[0][node_id]
        print('%s (score = %.5f)' % (human_string, score))

答案 7 :(得分:0)

在“retrain.py”代码中,你会看到一个名为'--final_tensor_name'的参数。如果您没有传递该参数,它将保留'final_result'或'Mul'(取决于您使用的版本)作为默认值。

在没有实际训练输出文件的情况下查看输入和输出名称的唯一方法是在'frozen_graph.pb'的TensorBoard中查看图形,或者在您的情况下查看'retrained_graph.pb'文件。

这是输出所需文件以在TensorBoard中查看它的好方法。 https://gist.github.com/jubjamie/2eec49ca1e4f58c5310d72918d991ef6

运行该代码并将输出转到所选目录后,您可以启动TensorBoard并在Chrome中查看。查看图表对我来说很有帮助,因为我是这个领域的菜鸟。

答案 8 :(得分:0)

或者您可以使用选项运行命令行而不更改代码:

python -m scripts.label_image2 --graph=tf_files/retrained_graph.pb -- 
folder_images=../updated_images/testing -- 
labels=tf_files/retrained_labels.txt --input_layer=Mul -- 
input_height=299 --input_width=299

答案 9 :(得分:0)

将输入图层设置为Mul对我有用。然而,它似乎忽略了我的输入大小设置,并没有做任何魔术将图像大小调整为299x299,我猜Mul正在期待。我这样做了:

set INPUT_WIDTH=194 
set INPUT_HEIGHT=141 
set INPUT_LAYER=Mul 
python -m scripts.label_image --image=%IMAGE% --input_height=%INPUT_HEIGHT% \
--input_width=%INPUT_WIDTH% --graph=%GRAPH% \
--input_layer=%INPUT_LAYER% --output_layer=final_result

得到了这个:

ValueError: Cannot feed value of shape (1, 141, 194, 3) 
for Tensor 'import/Mul:0', which has shape '(1, 299, 299, 3)'

哦,看看代码,input_width和input_height是将标准化为的原因,而不是从标准化。所以这一切都很好。我还需要添加我的标签。

答案 10 :(得分:0)

您必须在脚本文件夹中的n_cities_to_recommend = 10 neigh = NearestNeighbors(2, radius=1.0) # you need to play with radius here o scale your data to [0, 1] with [scaler][2] neigh.fit(cities) user_input = [budgetToTravel, isCoastel, isHistorical, withFamily, ...] neigh.kneighbors([user_input], n_cities_to_recommend, return_distance=False) # this will return you closest entities id's from cities 中进行一些更改

label_image.py input_height 224
更改为 299 input_height = 299 input_width 224
更改为 299 input_width = 299
input_mean = 128
input_std = 128输入
input_layer 更改为 Mul input_layer = "Mul"

输出:

output_layer = "final_result"

Evaluation time (1-image): 1.901s
daisy (score=0.98584)
sunflowers (score=0.01136)
dandelion (score=0.00210)
tulips (score=0.00066)

有关更多信息,请参见this page