Saltar al contenido

¿Cuál es la diferencia frozen_inference_graph.pb y Saved_model.pb?

Solución:

frozen_inference_graph.pb, es un gráfico congelado que ya no se puede entrenar, define el graphdef y en realidad es un gráfico serializado y se puede cargar con este código:

def load_graph(frozen_graph_filename):
    with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        return graph_def
tf.import_graph_def(load_graph("frozen_inference_graph.pb"))

el modelo guardado es un modelo generado por tf.saved_model.builder y debe importarse a una sesión, este archivo contiene el gráfico completo con todos los pesos de entrenamiento (al igual que el gráfico congelado) pero aquí se puede entrenar, y este no está serializado y debe cargarse con este fragmento. los [] son constantes de etiquetas que pueden ser leídas por Saved_model_cli. Este modelo también se sirve a menudo para predecir, como el ejemplo del par motor de google ml:

with tf.Session() as sess:
    tf.saved_model.loader.load(sess, [], "foldername to saved_model.pb, only folder")

Los archivos model.ckpt son puntos de control, que se generan durante el entrenamiento, se utilizan para reanudar el entrenamiento o para tener una copia de seguridad cuando algo sale mal después de un largo entrenamiento. Si tiene un modelo guardado y un gráfico congelado, puede ignorarlo.

Los archivos .pbtxt son básicamente los mismos que los modelos discutidos anteriormente, pero luego legibles por humanos, no binarios. Estos también pueden ignorarse.

Para responder a su pregunta de conversión: los modelos guardados se pueden transformar en un gráfico congelado y viceversa, aunque un modelo guardado extraído de un gráfico congelado tampoco se puede entrenar, pero la forma en que se almacena es en formato de modelo guardado. Los puntos de control se pueden leer y cargar en una sesión, y allí puede crear un modelo guardado a partir de ellos.

Espero haberlo ayudado, cualquier pregunta, ¡pregunte!

ADICIÓN:

Cómo congelar un gráfico, a partir de una estructura de carpeta de modelo guardada. Esta publicación es antigua, por lo que es posible que el método que usé antes ya no funcione, lo más probable es que siga funcionando con Tensorflow 1. +.

Comience por descargar este archivo de la biblioteca de tensorflow, y luego este fragmento de código debería hacer el truco:

    import freeze_graph # the file you just downloaded
    from tensorflow.python.saved_model import tag_constants # might be unnecessary

    freeze_graph.freeze_graph(
        input_graph=None,
        input_saver=None,
        input_binary=None,
        input_checkpoint=None,
        output_node_names="dense_output/BiasAdd",
        restore_op_name=None,
        filename_tensor_name=None,
        output_graph=os.path.join(path, "frozen_graph.pb"),
        clear_devices=None,
        initializer_nodes=None,
        input_saved_model_dir=path,
        saved_model_tags=tag_constants.SERVING
    )

output_node_names = Nombre de nodo de la operación final, si termina en una capa densa, será densa layer_name / BiasAdd

output_graph = nombre del gráfico de salida

input_saved_model_dir = carpeta raíz del modelo guardado

Saved_model_tags = etiquetas de modelo guardadas, en su caso, esto puede ser Ninguno, sin embargo, usé una etiqueta.

OTRA ADICION:

El código para cargar modelos ya se proporciona arriba. Para predecir realmente que necesita una sesión, para un modelo guardado, esta sesión ya está creada, para un modelo congelado, no lo es.

modelo guardado:

with tf.Session() as sess:
    tf.saved_model.loader.load(sess, [], "foldername to saved_model.pb, only folder")
    prediction = sess.run(output_tensor, feed_dict={input_tensor: test_images})

Modelo congelado:

tf.import_graph_def(load_graph("frozen_inference_graph.pb"))
with tf.Session() as sess:
    prediction = sess.run(output_tensor, feed_dict={input_tensor: test_images})

Para comprender mejor cuáles son sus capas de entrada y salida, debe verificarlas con tensorboard, simplemente agregue la siguiente línea de código en su sesión:

tf.summary.FileWriter("path/to/folder/to/save/logs", sess.graph)

Esta línea creará un archivo de registro que puede abrir con cli / powershell, para ver cómo ejecutar tensorboard, consulte esta pregunta publicada anteriormente

Me gusta agregar, frozen_graph.pb incluye dos cosas: 1. Definición de gráfico 2. Parámetros entrenados

Mientras que save_model.pb, solo tiene una definición de gráfico.

Es por eso que si verifica el tamaño de ambos archivos .pb, frozen_graph.pb siempre será más grande.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *