2 votes

Convertir le modèle tensorflow-hub en tensorflow lite(tflite)

J'essayais de convertir un modèle BigGAN dans tensorflow-hub(.pb) en un fichier TensorFlow Lite (.tflite) en utilisant le code suivant :

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import numpy as np
import tensorflow_hub as hub

module_path = 'https://tfhub.dev/deepmind/biggan-deep-256/1'
tf.compat.v1.reset_default_graph()
print('Loading BigGAN module from:', module_path)
module = hub.Module(module_path)
dummy_inputs = {
    "y": tf.compat.v1.placeholder(tf.float32, [1, 1000], 'y'),
    "z": tf.compat.v1.placeholder(tf.float32, [1, 128], 'z'),
    "truncation": tf.compat.v1.placeholder(tf.float32, [], 'truncation'),
}
dummy_output = module(dummy_inputs)
print('dummy_Inputs:\n', '\n'.join(
    '  {}: {}'.format(*kv) for kv in dummy_inputs.items()))
print('dummy_Output:', dummy_output)

initializer = tf.global_variables_initializer()
sess = tf.Session()
sess.run(initializer)

save_path = "./big_gan.tflite"
_input = [dummy_inputs[k] for k in dummy_inputs]
converter = tf.lite.TFLiteConverter.from_session(sess, _input, [dummy_output])
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.experimental_new_converter = True

# errors here
tflite_model = converter.convert()

open(save_path, "wb").write(tflite_model)

les informations retournées :

2022-01-28 17:10:30.240145: E tensorflow/core/grappler/grappler_item_builder.cc:670] Init node AssignVariableOp_1003 doesn't exist in graph
2022-01-28 17:10:33.853842: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
2022-01-28 17:10:33.853899: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.

lancer une erreur :

ConverterError: Input 0 of node module_apply_default/cond/AssignVariableOp was passed float from module_apply_default/cond/AssignVariableOp/Switch:0 incompatible with expected resource.

Le module fonctionne comme prévu. "Exemple d'utilisation" il peut générer des images normalement.
Quelqu'un peut-il m'aider à comprendre ce que fait Init node AssignVariableOp_1003 doesn't exist in graph et comment réparer l'erreur ?

1voto

AloneTogether Points 1136

Utilisation de TF 2.x pour convertir un TF 1.x vers un fichier TensorFlow Lite est délicat. Je vous recommande d'exécuter votre exemple de code sur Google Colab et de passer en mode TF 1.x :

%tensorflow_version 1.x

Cela semble fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X