machine learning - redes - Cómo continuar el modelo de entrenamiento utilizando ModelCheckpoint of Keras
redes neuronales con keras (2)
Caso interesante, podría ser una gran mejora ... No creo que la API actualmente admita esa solución, además de crear su propia función de devolución de llamada.
No creo que sea tan difícil. Podría basarlo en la clase de devolución de llamada del modelcheckpoint
original y simplemente cambiar.
Esta línea: https://github.com/fchollet/keras/blob/master/keras/callbacks.py#L390
Almacena el mejor valor actual del elemento que se está ejecutando, se inicializa en una instrucción if como -inf / inf según la situación.
En su caso, debería encontrar una forma de leer el nombre del archivo, hacer una manipulación de cadenas y agregar eso.
Sugiero agregarlo como una declaración separada ... o como un else if
.
Para evitar jugar demasiado con el código central.
Espero que haya ayudado ..
Soy un nuevo usuario de Keras. Tengo una pregunta sobre el procedimiento de entrenamiento con Keras.
Debido a la limitación de tiempo de mi servidor (cada trabajo solo puede ejecutarse en menos de 24 horas), tengo que capacitar a mi modelo usando un período de 10 épocas.
En el primer período de entrenamiento, después de 10 épocas, los pesos del mejor modelo se almacenan usando ModelCheckpoint of Keras.
conf = dict()
conf[''nb_epoch''] = 10
callbacks = [
ModelCheckpoint(filepath=''/1st_{epoch:d}_{val_loss:.5f}.hdf5'',
monitor=''val_loss'', save_best_only=True,
save_weights_only=False, verbose=0)
]
Supongamos que obtengo el mejor modelo: ''1st_10_1.00000.hdf5''. A continuación, continúo entrenando mi modelo usando 10 épocas y almacenando los pesos del mejor modelo de la siguiente manera.
model.load_weights(''1st_10_1.00000.hdf5'')
model.compile(...)
callbacks = [
ModelCheckpoint(filepath=''/2nd_{epoch:d}_{val_loss:.5f}.hdf5'',
monitor=''val_loss'', save_best_only=True,
save_weights_only=False, verbose=0)
]
Pero tengo un problema. La primera época de la segunda capacitación da val_loss de 1.20000, y la secuencia de comandos produce un modelo ''2nd_1_1.20000.hdf5''. Obviamente, el nuevo val_loss es mayor que el mejor val_loss del primer entrenamiento (1.00000). Y las siguientes épocas del segundo entrenamiento parecen estar capacitadas según el modelo ''2nd_1_1.20000.hdf5'', no ''1st_10_1.00000.hdf5''.
''2nd_1_1.20000.hdf5''
''2nd_1_2.15000.hdf5''
''2nd_1_3.10000.hdf5''
''2nd_1_4.05000.hdf5''
...
Creo que es un desperdicio no usar el mejor resultado del primer período de entrenamiento. ¿Alguien puede indicarme el camino para arreglarlo, o la forma de decirle al programa que debe usar el mejor modelo del período de entrenamiento anterior? ¡Muchas gracias de antemano!
Me encontré con el problema idéntico y no vi tu pregunta hasta que también hice la pregunta. En base a los comentarios que obtuve, escribí una devolución de llamada simple que guarda y restaura los mejores valores de entrenamiento (como val_loss). Puede encontrarlo aquí: ¿Cómo preservar los valores de métrica sobre las sesiones de entrenamiento en Keras?