tutorial train neural network fashion example español python machine-learning tensorflow

python - train - tensorflow para poetas: "El nombre ''importación/entrada'' se refiere a una Operación que no está en el gráfico".



tensorflow tutorial pdf (11)

Estaba siguiendo el tensorflow de codelabs para poetas y el entrenamiento funcionó bien, pero cuando ejecuté el script para evaluar una imagen:

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

Tuve el siguiente error:

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

Miré a mi alrededor y tiene algo que ver con la elección de la capa de entrada y salida, el script label_image.py tiene "entrada" y "salida" establecidos por defecto. La arquitectura que estoy usando es ''inception_v3''.


Cambié ~ / scripts / label_image.py línea 77 y funciona:

desde

input_layer = "input"

a

input_layer = "Mul"


Como @Mimii y @Celio mencionaron: cambiar ~ / scripts / label_image.py, en la línea input_layer = "input" por input_layer = "Mul" Y cambiar las dimensiones de entrada: input_height = 299 y input_width= 299


Debe agregar --output_layer=final_result:0 como parámetro.

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


Dentro del código "retrain.py" verá un argumento llamado ''--final_tensor_name''. Si no pasa ese argumento, mantendrá ''final_result'' o ''Mul'' (dependiendo de la versión que use) como predeterminado.

La única forma de ver los nombres de entrada y salida sin los archivos de salida de entrenamiento reales es ver el gráfico en TensorBoard del ''frozen_graph.pb'' o en su caso el archivo ''retrained_graph.pb''.

Esta es una buena forma de generar los archivos necesarios para verlos en TensorBoard. https://gist.github.com/jubjamie/2eec49ca1e4f58c5310d72918d991ef6

Una vez que ejecute ese código y tenga la salida en el directorio elegido, puede iniciar TensorBoard y verlo en Chrome. Ver la gráfica me ayuda mucho ya que soy un noob en esta área.


Establecer la capa de entrada a Mul funciona para mí. Sin embargo, parece estar ignorando la configuración de mi tamaño de entrada y no hace nada mágico para cambiar el tamaño de la imagen a 299x299, que supongo que Mul espera. Hice esto:

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

y obtuve esto:

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

Y ohhh, mirar el código, input_width y input_height son los elementos a los que se debe normalizar, no a los que se debe normalizar. Así que todo está bien. También necesitaba agregar mis etiquetas.


Lo siento por la respuesta tardía. Ejecuto el script de Python a continuación con un modelo reentrenado. ¿Puedes probar este?

Requisitos: labels.txt y output.pb (modelo reentrenado) deben estar en el mismo directorio con mi fragmento de Python. Guarde el código a continuación como test.py Y llámelo como: 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))


No todos están recibiendo este error. Supongo que si utilizó alguna otra arquitectura aparte de MobileNet, aparecerá este error. En su archivo label_image.py cambie los valores a:

input_height = 299 input_width = 299 input_layer = "Mul"

Esto debería resolverlo.


O puede ejecutar las líneas de comando con las opciones sin cambiar los códigos:

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


Tienes que hacer algunos cambios en label_image.py en la carpeta de scripts

input_height = 299 Cambia input_height a 299 desde 224
input_width = 299 Cambiar input_width a 299 desde 224
input_mean = 128
input_std = 128
input_layer = "Mul" Cambia input_layer a Mul desde la entrada
output_layer = "final_result"

Salida:

Evaluation time (1-image): 1.901s

daisy (score=0.98584)
sunflowers (score=0.01136)
dandelion (score=0.00210)
tulips (score=0.00066)
roses (score=0.00004)

Para más información, consulte esta página.


Utilice el nombre --input_layer como marcador de posición. Funcionará porque el script retrain.py ha establecido el valor predeterminado de input_layer como "Marcador de posición".

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


Utilizar esta

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