Una utilidad de Python para recargar un cuerpo de bucle desde la fuente en cada iteración sin perder el estado
Útil para editar el código fuente durante la capacitación de modelos de aprendizaje profundo. Esto le permite agregar registro, imprimir estadísticas o guardar el modelo sin reiniciar la capacitación y, por lo tanto, sin perder el progreso de la capacitación.

pip install reloading
Para recargar el cuerpo de un for para la fuente antes de cada iteración, simplemente envuelva el iterador con reloading , por ejemplo
from reloading import reloading
for i in reloading ( range ( 10 )):
# this code will be reloaded before each iteration
print ( i ) Para recargar una función de la fuente antes de cada ejecución, decorara la definición de función con @reloading , por ejemplo
from reloading import reloading
@ reloading
def some_function ():
# this code will be reloaded before each invocation
pass Pase el argumento de la palabra clave every volver a cargar en cada invocación o iteración N-th. P.ej
for i in reloading ( range ( 1000 ), every = 10 ):
# this code will only be reloaded before every 10th iteration
# this can help to speed-up tight loops
pass
@ reloading ( every = 10 )
def some_function ():
# this code with only be reloaded before every 10th invocation
pass Pase forever=True en lugar de un iterable para crear un bucle de recarga interminable, por ejemplo,
for i in reloading ( forever = True ):
# this code will loop forever and reload from source before each iteration
pass Aquí están los fragmentos cortos de cómo usar la recarga con su biblioteca favorita. Para ver ejemplos completos, consulte la carpeta de ejemplos.
for epoch in reloading ( range ( NB_EPOCHS )):
# the code inside this outer loop will be reloaded before each epoch
for images , targets in dataloader :
optimiser . zero_grad ()
predictions = model ( images )
loss = F . cross_entropy ( predictions , targets )
loss . backward ()
optimiser . step ()Aquí hay un ejemplo completo de Pytorch.
@ reloading
def update_learner ( learner ):
# this function will be reloaded from source before each epoch so that you
# can make changes to the learner while the training is running
pass
class LearnerUpdater ( LearnerCallback ):
def on_epoch_begin ( self , ** kwargs ):
update_learner ( self . learn )
path = untar_data ( URLs . MNIST_SAMPLE )
data = ImageDataBunch . from_folder ( path )
learn = cnn_learner ( data , models . resnet18 , metrics = accuracy ,
callback_fns = [ LearnerUpdater ])
learn . fit ( 10 )Aquí hay un ejemplo completo de Fastai.
@ reloading
def update_model ( model ):
# this function will be reloaded from source before each epoch so that you
# can make changes to the model while the training is running using
# K.set_value()
pass
class ModelUpdater ( Callback ):
def on_epoch_begin ( self , epoch , logs = None ):
update_model ( self . model )
model = Sequential ()
model . add ( Dense ( 64 , activation = 'relu' , input_dim = 20 ))
model . add ( Dense ( 10 , activation = 'softmax' ))
sgd = SGD ( lr = 0.01 , decay = 1e-6 , momentum = 0.9 , nesterov = True )
model . compile ( loss = 'categorical_crossentropy' ,
optimizer = sgd ,
metrics = [ 'accuracy' ])
model . fit ( x_train , y_train ,
epochs = 200 ,
batch_size = 128 ,
callbacks = [ ModelUpdater ()])Aquí hay un ejemplo completo de Keras.
for epoch in reloading ( range ( NB_EPOCHS )):
# the code inside this outer loop will be reloaded from source
# before each epoch so that you can change it during training
train_loss . reset_states ()
train_accuracy . reset_states ()
test_loss . reset_states ()
test_accuracy . reset_states ()
for images , labels in tqdm ( train_ds ):
train_step ( images , labels )
for test_images , test_labels in tqdm ( test_ds ):
test_step ( test_images , test_labels )Aquí hay un ejemplo completo de flujo de tensor.
Asegúrese de tener python y python3 disponibles en su camino, luego ejecute:
$ python3 reloading/test_reloading.py