web-dev-qa-db-fra.com

tensorflow for poets: "Le nom 'import/input' fait référence à une opération ne figurant pas dans le graphique."

Je suivais le tenseur de codelabs pour les poètes et la formation a bien fonctionné, mais lorsque j’ai exécuté le script pour évaluer une image:

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

J'ai eu l'erreur suivante: 

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

J'ai regardé autour de moi et cela a quelque chose à voir avec le choix des couches d'entrée et de sortie, le script label_image.py a les options 'entrée' et 'sortie' définies par défaut. L'architecture que j'utilise est 'inception_v3'.

17
Celio

J'ai changé ~/scripts/label_image.py ligne 77 et cela fonctionne:

de 

input_layer = "input"

à

input_layer = "Mul"
14
Mimii Cheng

Utilisez --input_layer name comme espace réservé. Cela fonctionnera car le script retrain.py a défini la valeur par défaut de input_layer comme "Placeholder".

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

Ce n'est pas tout le monde qui reçoit cette erreur. J'imagine que si vous utilisiez une architecture autre que MobileNet, cette erreur se produirait… ... Dans votre fichier label_image.py. 

input_height = 299
input_width = 299
input_layer = "Mul"

Cela devrait le résoudre.

5
Umang Mistry

Comme @Mimii et @Celio l'ont mentionné: remplacez ~/scripts/label_image.py, à la ligne input_layer = "input" par input_layer = "Mul"ETmodifiez les dimensions d'entrée: input_height = 299 et input_width= 299

1
Enayat Rajabi

Utilisez ceci

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
1
HimalayanCoder

Désolé pour la réponse tardive . J'exécute le script python ci-dessous avec un modèle recyclé. Pouvez-vous essayer celui-ci?

Conditions requises: labels.txt et output.pb (modèle recyclé) doivent se trouver dans le même répertoire que mon scipt python. Enregistrez le code ci-dessous sous le nom test.py .__ et appelez-le ainsi: 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))
0
Hakan A.

Dans le code "retrain.py", vous verrez un argument appelé '--final_tensor_name'. Si vous ne passez pas cet argument, il gardera 'final_result' ou 'Mul' (selon la version que vous utilisez) comme valeur par défaut. 

Le seul moyen d'afficher les noms d'entrée et de sortie sans les fichiers de sortie d'apprentissage réels consiste à afficher le graphique dans TensorBoard du fichier 'frozen_graph.pb' ou, dans votre cas, le fichier 'retrained_graph.pb'.

C’est un bon moyen de sortir les fichiers requis pour les voir dans TensorBoard . https://Gist.github.com/jubjamie/2eec49ca1e4f58c5310d72918d991ef6

Une fois que vous avez exécuté ce code et que la sortie est passée dans le répertoire choisi, vous pouvez démarrer TensorBoard et l'afficher dans Chrome. Voir le graphique m'aide beaucoup puisque je suis un noob dans ce domaine.

0
MichaelGee

Vous devriez ajouter --output_layer=final_result:0 en tant que paramètre.

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
0
Hakan A.

La définition de la couche d’entrée sur Mul fonctionne pour moi. Cependant, il semble ignorer mes paramètres de taille d’entrée et ne fait pas de magie pour redimensionner l’image en 299x299, ce que je suppose que Mul attend. J'ai fait ça:

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

et obtenu ceci:

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

Et ohhh, en regardant le code, input_width et input_height sont ce qu'il faut normaliser à , ne pas normaliser à partir de . Donc tout va bien. J'avais aussi besoin d'ajouter mes étiquettes.

0
Lars Ericson

Ou vous pouvez exécuter des lignes de commande avec les options sans changer de code:

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
0
beahacker