Ein Python -Dienstprogramm zum Nachladen eines Schleifenkörpers von der Quelle für jede Iteration, ohne den Zustand zu verlieren
Nützlich zum Bearbeiten von Quellcode während des Trainings von Deep -Learning -Modellen. Auf diese Weise können Sie z. B. Protokollierung hinzufügen, Statistiken drucken oder das Modell speichern, ohne das Training neu zu starten, und daher ohne den Trainingsfortschritt zu verlieren.

pip install reloading
Um den Körper eines for Schleife aus der Quelle vor jeder Iteration neu zu laden, wickeln Sie einfach den Iterator mit reloading ein, z. B.
from reloading import reloading
for i in reloading ( range ( 10 )):
# this code will be reloaded before each iteration
print ( i ) Dekorieren Sie die Funktionsdefinition mit @reloading , z. B. eine Funktion vor jeder Ausführung neu, z. B. die Funktionsdefinition
from reloading import reloading
@ reloading
def some_function ():
# this code will be reloaded before each invocation
pass Übergeben Sie das Schlüsselwortargument every , um nur für jeden n-th-Aufruf oder jede Iteration neu zu laden. Z.B
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 Pass forever=True anstelle einer iterablen, um eine endlose Nachladeschleife zu erstellen, z. B.
for i in reloading ( forever = True ):
# this code will loop forever and reload from source before each iteration
pass Hier sind die kurzen Ausschnitte, wie Sie mit Ihrer bevorzugten Bibliothek neu geladen werden können. Um vollständige Beispiele zu erhalten, lesen Sie den Beispiel -Ordner.
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 ()Hier ist ein volles Pytorch -Beispiel.
@ 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 )Hier ist ein volles Fastai -Beispiel.
@ 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 ()])Hier ist ein volles Keras -Beispiel.
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 )Hier ist ein volles Tensorflow -Beispiel.
Stellen Sie sicher, dass Sie python und python3 auf Ihrem Weg verfügbar haben, und rennen Sie dann:
$ python3 reloading/test_reloading.py