cargando el modelo keras guardado desde gs a pydatalab

Mi modelo de keras se guarda en el almacenamiento de google con model.save (nombre_modelo)

No puedo cargar el modelo en pydatalab. Cuando guardo el modelo en mi máquina local, puedo abrirlo con load_model (filepath). También importé keras.backend como K, basado en NameError al abrir el modelo Keras que usa Tensorflow Backend

He probado lo siguiente:

  1. model = load_model(tf.gfile.Open(model_file)) 

Error: TypeError: esperado str, bytes u os.PathLike objeto, no GFile

  1.  load_model('gs://mybucket/model.h5') 

Error: IOError: No se puede abrir el archivo (no se puede abrir el archivo: nombre = ‘gs: //mybucket/model.h5’, errno = 2, mensaje de error = ‘No hay tal archivo o directorio’, indicadores = 0, o_flags = 0 )

  1.  with file_io.FileIO(model_file, 'r') as f: modl = load_model(f) 

error: TypeError: esperado str, bytes u os.PathLike objeto, no FileIO

Carga el archivo desde gs storage

 from tensorflow.python.lib.io import file_io model_file = file_io.FileIO('gs://mybucket/model.h5', mode='rb') 

Guarda una copia temporal del modelo localmente

 temp_model_location = './temp_model.h5' temp_model_file = open(temp_model_location, 'wb') temp_model_file.write(model_file.read()) temp_model_file.close() model_file.close() 

Cargar modelo guardado localmente

 model = load_model(temp_model_location) 

No creo que Keras sea compatible con el sistema de archivos TensorFlow que, a su vez, sabe leer desde GCS.

Puede intentar descargar desde GCS a una ruta local, y luego leer desde ahí para cargar el modelo.

La siguiente función sirve para volver a capacitar a un modelo de keras ya entrenado (con nuevos datos) en la plataforma de aprendizaje automático de gcloud (gracias a Tíarnán McGrath).

 def load_models(model_file): model = conv2d_model() #the architecture of my model, not compiled yet file_stream = file_io.FileIO(model_file, mode='r') temp_model_location = './temp_model.h5' temp_model_file = open(temp_model_location, 'wb') temp_model_file.write(file_stream.read()) temp_model_file.close() file_stream.close() model.load_weights(temp_model_location) return model 

Por alguna razón, load_model from keras.models ya no funciona para mí, así que tengo que construir el modelo cada vez.