Lorsque je charge la totalité du jeu de données en mémoire et entraîne le réseau dans Keras à l'aide du code suivant:
model.fit(X, y, nb_Epoch=40, batch_size=32, validation_split=0.2, verbose=1)
Cela génère une barre de progression par époque avec des mesures telles que l'ETA, la précision, les pertes, etc.
Lorsque j'entraîne le réseau par lots, j'utilise le code suivant
for e in range(40):
for X, y in data.next_batch():
model.fit(X, y, nb_Epoch=1, batch_size=data.batch_size, verbose=1)
Cela générera une barre de progression pour chaque lot au lieu de chaque époque. Est-il possible de générer une barre de progression pour chaque époque lors d'une formation par lots?
1.
model.fit(X, y, nb_Epoch=40, batch_size=32, validation_split=0.2, verbose=1)
Dans ce qui précède, passez à verbose=2
, comme indiqué dans la documentation: "verbose: 0 pour l’absence de journalisation sur stdout, 1 pour la journalisation de la barre de progression, 2 for one log line per Epoch
. "
Cela montrera votre sortie comme:
Epoch 1/100
0s - loss: 0.2506 - acc: 0.5750 - val_loss: 0.2501 - val_acc: 0.3750
Epoch 2/100
0s - loss: 0.2487 - acc: 0.6250 - val_loss: 0.2498 - val_acc: 0.6250
Epoch 3/100
0s - loss: 0.2495 - acc: 0.5750 - val_loss: 0.2496 - val_acc: 0.6250
.....
.....
2.
Si vous souhaitez afficher une barre de progression pour l'achèvement des périodes, conservez verbose=0
(qui ferme la journalisation sur stdout) et implémente de la manière suivante:
from time import sleep
import sys
epochs = 10
for e in range(epochs):
sys.stdout.write('\r')
for X, y in data.next_batch():
model.fit(X, y, nb_Epoch=1, batch_size=data.batch_size, verbose=0)
# print loss and accuracy
# the exact output you're looking for:
sys.stdout.write("[%-60s] %d%%" % ('='*(60*(e+1)/10), (100*(e+1)/10)))
sys.stdout.flush()
sys.stdout.write(", Epoch %d"% (e+1))
sys.stdout.flush()
La sortie sera comme suit:
[=============================================== ===========] 100%, Époque 10
3.
Si vous souhaitez afficher les pertes tous les n lots, vous pouvez utiliser:
out_batch = NBatchLogger(display=1000)
model.fit([X_train_aux,X_train_main],Y_train,batch_size=128,callbacks=[out_batch])
Bien que je ne l'aie jamais essayée auparavant. L'exemple ci-dessus est tiré de ce numéro de keras github: Afficher les pertes tous les N lots # 285
Vous pouvez également suivre une démo de NBatchLogger
ici:
class NBatchLogger(Callback):
def __init__(self, display):
self.seen = 0
self.display = display
def on_batch_end(self, batch, logs={}):
self.seen += logs.get('size', 0)
if self.seen % self.display == 0:
metrics_log = ''
for k in self.params['metrics']:
if k in logs:
val = logs[k]
if abs(val) > 1e-3:
metrics_log += ' - %s: %.4f' % (k, val)
else:
metrics_log += ' - %s: %.4e' % (k, val)
print('{}/{} ... {}'.format(self.seen,
self.params['samples'],
metrics_log))
4.
Vous pouvez également utiliser progbar
pour la progression, mais la progression sera imprimée par lots.
from keras.utils import generic_utils
progbar = generic_utils.Progbar(X_train.shape[0])
for X_batch, Y_batch in datagen.flow(X_train, Y_train):
loss, acc = model_test.train([X_batch]*2, Y_batch, accuracy=True)
progbar.add(X_batch.shape[0], values=[("train loss", loss), ("acc", acc)])
vous pouvez définir verbose = 0 et définir des rappels qui mettront à jour les progrès à la fin de chaque ajustement,
clf.fit(X, y, nb_Epoch=1, batch_size=data.batch_size, verbose=0, callbacks=[some_callback])
https://keras.io/callbacks/#example-model-checkpoints
ou définir un rappel https://keras.io/callbacks/#remotemonitor