Un utilitaire Python pour recharger un corps de boucle de la source sur chaque itération sans perdre l'état
Utile pour modifier le code source pendant la formation des modèles d'apprentissage en profondeur. Cela vous permet d'ajouter la journalisation, d'imprimer des statistiques ou de sauvegarder le modèle sans redémarrer la formation et, par conséquent, sans perdre la progression de la formation.

pip install reloading
Pour recharger le corps d'une boucle for la source avant chaque itération, enveloppez simplement l'itérateur de reloading , par exemple
from reloading import reloading
for i in reloading ( range ( 10 )):
# this code will be reloaded before each iteration
print ( i ) Pour recharger une fonction de la source avant chaque exécution, décorez la définition de la fonction avec @reloading , par exemple
from reloading import reloading
@ reloading
def some_function ():
# this code will be reloaded before each invocation
pass Passez l'argument du mot-clé every pour recharger uniquement sur chaque n-inth ou itération. Par exemple
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 Passer forever=True au lieu d'un itérable pour créer une boucle de rechargement sans fin, par exemple
for i in reloading ( forever = True ):
# this code will loop forever and reload from source before each iteration
pass Voici les extraits courts de la façon d'utiliser le rechargement avec votre bibliothèque préférée. Pour des exemples complets, consultez le dossier Exemples.
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 ()Voici un exemple complet 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 )Voici un exemple complet 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 ()])Voici un exemple complet 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 )Voici un exemple complet TensorFlow.
Assurez-vous d'avoir python et python3 disponibles sur votre chemin, puis exécutez:
$ python3 reloading/test_reloading.py