Um utilitário python para recarregar um corpo de loop da fonte em cada iteração sem perder o estado
Útil para editar o código -fonte durante o treinamento de modelos de aprendizado profundo. Isso permite que você adicione o registro, imprima estatísticas ou salve o modelo sem reiniciar o treinamento e, portanto, sem perder o progresso do treinamento.

pip install reloading
Para recarregar o corpo de um for da fonte antes de cada iteração, basta embrulhar o iterador com reloading , por exemplo
from reloading import reloading
for i in reloading ( range ( 10 )):
# this code will be reloaded before each iteration
print ( i ) Para recarregar uma função da fonte antes de cada execução, decore a definição de função com @reloading , por exemplo
from reloading import reloading
@ reloading
def some_function ():
# this code will be reloaded before each invocation
pass Passe o argumento da palavra-chave every para recarregar apenas em todas as invocções ou iteração da N-Th. Por exemplo
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 Passam forever=True em vez de um iterável criar um loop de recarga sem fim, por exemplo
for i in reloading ( forever = True ):
# this code will loop forever and reload from source before each iteration
pass Aqui estão os trechos curtos de como usar a recarga com sua biblioteca favorita. Para exemplos completos, consulte a pasta Exemplos.
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 ()Aqui está um exemplo 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 )Aqui está um exemplo fastai completo.
@ 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 ()])Aqui está um exemplo 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 )Aqui está um exemplo completo de tensorflow.
Certifique -se de ter python e python3 disponíveis em seu caminho e execute:
$ python3 reloading/test_reloading.py