El entrenamiento de un modelo de red neuronal/aprendizaje profundo suele llevar mucho tiempo, especialmente si la capacidad del hardware del sistema no cumple con los requisitos. Una vez realizado el entrenamiento, guardamos el modelo en un archivo. Para reutilizar el modelo en un momento posterior para hacer predicciones, cargamos el modelo guardado.
A través de Keras, los modelos se pueden guardar en tres formatos:
- formato YAML
- formato JSON
- formato HDF5
Los archivos YAML y JSON almacenan solo la estructura del modelo, mientras que el archivo HDF5 almacena el modelo de red neuronal completo junto con la estructura y los pesos. Por lo tanto, si la estructura del modelo se guarda en formato YAML o JSON, los pesos deben almacenarse en un archivo HDF5 para almacenar todo el modelo.
Teniendo en cuenta el conjunto de datos de precios de la vivienda de Boston:
Código: cargando el conjunto de datos y preprocesando los datos
import keras from keras.datasets import boston_housing (train_data, train_targets), (test_data, test_targets)= boston_housing.load_data() mean = train_data.mean(axis = 0) train_data-= mean std = train_data.std(axis = 0) train_data/= std test_data-= mean test_data/= std
Código: entrenar un modelo de red neuronal en él
from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation ="relu", input_shape =(train_data.shape[1], ))) model.add(layers.Dense(64, activation ="relu")) model.add(layers.Dense(1)) model.compile(optimizer ="rmsprop", loss ="mse", metrics =["mae"]) loss, accuracy = model.evaluate(test_data, test_targets)
Producción:
Código: guardar y recargar modelo en formato de archivo HDF5
from keras.models import load_model model.save("network.h5") loaded_model = load_model("network.h5") loss, accuracy = loaded_model.evaluate(test_data, test_targets)
Producción:
Código: guardar y recargar el modelo en formato de archivo JSON
# Saving model structure to a JSON file model_json = model.to_json() # with open("network.json", "w") as json_file: json_file.write(model_json) # Saving weights of the model to a HDF5 file model.save_weights("network.h5") # Loading JSON file json_file = open("network.json", 'r') loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) # Loading weights loaded_model.load_weights("network.h5") loss, accuracy = loaded_model.evaluate(test_data, test_targets)
Código: guardar y volver a cargar el modelo en formato de archivo YAML
# Saving model structure to a YAML file model_yaml = model.to_yaml() with open("network.yaml", "w") as yaml_file: yaml_file.write(model_yaml) # Saving weights of the model to a HDF5 file model.save_weights("network.h5") # Loading YAML file yaml_file = open("network.yaml", 'r') loaded_model_yaml = yaml_file.read() yaml_file.close() loaded_model = model_from_yaml(loaded_model_yaml) # Loading weights loaded_model.load_weights("network.h5") loss, accuracy = loaded_model.evaluate(test_data, test_targets)