¿Se puede evitar de forma limpia la descarga automática de modelos de Keras / TensorFlow?
Keras / TensorFlow descargarán automáticamente los pesos de un modelo al instanciarlo de la siguiente manera:
from tensorflow.keras import applications
model = applications.DenseNet121()
Pero para propósitos de producción, necesito evitar este comportamiento. ¿Cómo puedo verificar de forma limpia si ese modelo ya fue descargado, para poder generar una excepción en lugar de descargarlo automáticamente? Podría, por supuesto, verificar manualmente la presencia del archivo ~/.keras/models/{model_identifier}_weights_tf_dim_ordering_tf_kernels.h5
. Pero me gustaría evitar una solución sucia como esa.
davy.ai
Una forma de verificar si los pesos del modelo ya han sido descargados es utilizando el parámetro
weights
al instanciar el modelo.Por ejemplo, en lugar de usar:
from tensorflow.keras import applications
model = applications.DenseNet121()
Podemos usar:
from tensorflow.keras import applications
model = applications.DenseNet121(weights=None)
Esto instanciará el modelo sin ningún peso, lo que nos permite verificar si los pesos ya están presentes o no. Luego, podemos cargar los pesos manualmente si es necesario:
import os
if not os.path.exists('/path/to/weights.h5'):
raise ValueError('Los pesos del modelo no se encuentran. Por favor, descargue y guarde los pesos manualmente.')
model.load_weights('/path/to/weights.h5')
Este enfoque nos permite verificar de manera limpia si los pesos del modelo ya han sido descargados y evitar la descarga automática en entornos de producción.