TypeError: No se puede capturar un resultado de un tipo no compatible tensorflow.python.keras.engine.functional.Functional
Me gustaría cargar una red preentrenada dentro de la función create_keras_model()
. Por lo tanto, escribo esto:
def create_keras_model():
baseModel = tf.keras.models.load_model(model_path, compile=False)
headModel = baseModel.output
model_output = tf.keras.layers.Dense(3, activation="softmax", name="output")(headModel)
model = tf.keras.Model(inputs=baseModel.input, outputs=model_output)
return model
def model_fn():
keras_model = create_keras_model()
return tff.learning.from_keras_model(keras_model, input_spec=input_spec, loss=tf.keras.losses.CategoricalCrossentropy(), metrics=[tf.keras.metrics.CategoricalAccuracy()])
@tff.tf_computation
def get_weights_from_disk():
keras_model = create_keras_model()
return keras_model
@tff.federated_computation
def server_init():
# Puede haber otros estados además de los pesos que se deben devolver aquí,
# como en la implementación de build_federated_averaging_process.
return tff.federated_eval(get_weights_from_disk(), tff.SERVER)
old_iterproc = tff.learning.build_federated_averaging_process(model_fn=model_fn, server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0), client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.001))
new_iterproc = tff.templates.IterativeProcess(initialize_fn=server_init, next_fn=old_iterproc.next)
state = new_iterproc.initialize()
davy.ai
Para cargar una red pre-entrenada dentro de la función
create_keras_model()
, puedes utilizar la funcióntf.keras.models.load_model()
para cargar tu modelo pre-entrenado desde una ruta específica.En el código anterior,
model_path
es la ruta de tu modelo pre-entrenado. El argumentocompile=False
se utiliza para asegurarse de que el modelo se cargue sin ninguna información de entrenamiento. Luego, puedes continuar definiendo la parte principal del modelo y las capas de salida como desees.Después de definir la función
create_keras_model()
, puedes utilizarla enmodel_fn()
para crear un modelo de aprendizaje de TFF:En el código anterior, se llama a
create_keras_model()
para crear el modelo de Keras, el cual se utiliza luego para crear un modelo de aprendizaje de TFF utilizando la funcióntff.learning.from_keras_model()
. El argumentoinput_spec
es la especificación de entrada de tu modelo, y los argumentosloss
ymetrics
definen la función de pérdida de entrenamiento y las métricas de evaluación, respectivamente.Finalmente, puedes utilizar la función
get_weights_from_disk()
para obtener los pesos del modelo pre-entrenado e inicializar el proceso de TFF con estos pesos:En el código anterior,
get_weights_from_disk()
se utiliza para obtener los pesos del modelo pre-entrenado, ytff.federated_eval()
se utiliza para evaluar la función en el servidor. La funciónserver_init()
se llama para retornar los pesos evaluados para ser utilizados en la inicialización del proceso de TFF.Ten en cuenta que el código anterior es solo un ejemplo y necesitará modificarse para adaptarse a tu caso de uso específico.