Подтвердить что ты не робот

tensorflow для поэтов: "Импорт/ввод имени" относится к операции, не находящейся на графике ".

Я следил за тендером codelabs для поэтов, и обучение отлично работало, но когда я запустил скрипт для оценки изображения:

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".

4b9b3361

Ответ 1

Я изменил строку ~/scripts/label_image.py, и она работает:

от

input_layer = "input"

в

input_layer = "Mul"

Ответ 2

Не все получают эту ошибку. Я предполагаю, что если вы использовали какую-либо другую архитектуру помимо MobileNet, эта ошибка появляется. В файле label_image.py измените значения:

input_height = 299
input_width = 299
input_layer = "Mul"

Это должно решить проблему.

Ответ 3

Используйте имя --input_layer в качестве Placeholder. Он будет работать, потому что скрипт retrain.py установил значение по умолчанию для input_layer как "Placeholder".

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

Ответ 4

Использовать этот

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

Вы должны добавить --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

Извини за поздний ответ. Я запускаю скрипт python ниже с помощью переквалифицированной модели. Можете ли вы попробовать этот?

Требования: labels.txt и output.pb (переобученная модель) должны находиться в одном каталоге с моим сценарием python. Сохраните код ниже как 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

Внутри кода "retrain.py" вы увидите аргумент "--final_tensor_name". Если вы не пройдете этот аргумент, он сохранит "final_result" или "Mul" (в зависимости от версии вашего использования) в качестве значения по умолчанию.

Единственный способ просмотра имен ввода и вывода без фактических файлов выходных файлов - просмотр графика в TensorBoard файла "frozen_graph.pb" или в вашем случае файл retrained_graph.pb.

Это хороший способ вывода необходимых файлов для просмотра в TensorBoard. https://gist.github.com/jubjamie/2eec49ca1e4f58c5310d72918d991ef6

После того, как вы запустите этот код и получите выход в выбранный вами каталог, вы можете запустить TensorBoard и просмотреть его в Chrome. Просмотр графика помогает мне много, так как я нооб в этой области.

Ответ 8

Как @Mimii и @Celio упомянул: change ~/scripts/label_image.py, на строке input_layer = "input" на input_layer = "Mul" И измените входные размеры: input_height = 299 и input_width= 299

Ответ 9

Или вы можете запускать командные строки с параметрами без изменения кодов:

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

Ответ 10

Настройка уровня ввода для 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)'

И ohhh, глядя на код, input_width и input_height - это то, что нормализуется, а не нормализуется. Так что все хорошо. Также мне нужно было добавить свои ярлыки.