J'ajoute un rappel au taux d'apprentissage de décroissance:
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=100,
verbose=0, mode='auto',epsilon=0.00002, cooldown=20, min_lr=0)
voici mon rappel tensorboard:
keras.callbacks.TensorBoard(log_dir='./graph/rank{}'.format(hvd.rank()), histogram_freq=10, batch_size=FLAGS.batch_size,
write_graph=True, write_grads=True, write_images=False)
Je veux m'assurer qu'il a bien fonctionné pendant mon entraînement, donc je veux afficher le taux d'apprentissage sur tensorbaord, mais je ne trouve pas où le régler.
J'ai également vérifié l'api de l'optimiseur, mais pas de chance.
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
Alors, comment puis-je afficher le taux d'apprentissage sur tensorboad?
Selon l'auteur de Keras , la manière appropriée consiste à sous-classer le rappel TensorBoard
:
from keras import backend as K
from keras.callbacks import TensorBoard
class LRTensorBoard(TensorBoard):
def __init__(self, log_dir, **kwargs): # add other arguments to __init__ if you need
super().__init__(log_dir=log_dir, **kwargs)
def on_Epoch_end(self, Epoch, logs=None):
logs = logs or {}
logs.update({'lr': K.eval(self.model.optimizer.lr)})
super().on_Epoch_end(Epoch, logs)
Passez-le ensuite dans le cadre de l'argument callbacks
à model.fit
(crédit prix Finncent ):
model.fit(x=..., y=..., callbacks=[LRTensorBoard(log_dir="/tmp/tb_log")])
Vous avez donné le code de l'optimiseur deux fois, au lieu du rappel TensorBoard. Quoi qu'il en soit, je n'ai pas trouvé le moyen d'afficher le taux d'apprentissage sur TensorBoard. Je le trace à la fin de la formation, en prenant des données de l'objet History:
nb_Epoch = len(history1.history['loss'])
learning_rate=history1.history['lr']
xc=range(nb_Epoch)
plt.figure(3,figsize=(7,5))
plt.plot(xc,learning_rate)
plt.xlabel('num of Epochs')
plt.ylabel('learning rate')
plt.title('Learning rate')
plt.grid(True)
plt.style.use(['seaborn-ticks'])
Le graphique ressemble à ceci: tracé LR
Désolé, ce n'est pas exactement ce que vous demandez, mais cela pourrait peut-être vous aider.
class XTensorBoard(TensorBoard):
def on_Epoch_begin(self, Epoch, logs=None):
# get values
lr = float(K.get_value(self.model.optimizer.lr))
decay = float(K.get_value(self.model.optimizer.decay))
# computer lr
lr = lr * (1. / (1 + decay * Epoch))
K.set_value(self.model.optimizer.lr, lr)
def on_Epoch_end(self, Epoch, logs=None):
logs = logs or {}
logs['lr'] = K.get_value(self.model.optimizer.lr)
super().on_Epoch_end(Epoch, logs)
callbacks_list = [XTensorBoard('./logs')]
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=20, batch_size=32, verbose=2, callbacks=callbacks_list)