J'ai construit un réseau de neurones avec Keras. Je voudrais visualiser ses données par Tensorboard, donc j'ai utilisé:
keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
write_graph=True, write_images=True)
comme expliqué dans keras.io . Lorsque je lance le rappel, j'obtiens <keras.callbacks.TensorBoard at 0x7f9abb3898>
, mais je n'ai aucun fichier dans mon dossier "Graph". Quelque chose ne va pas dans la façon dont j'ai utilisé ce rappel?
keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0,
write_graph=True, write_images=True)
Cette ligne crée un objet Callback Tensorboard. Vous devez capturer cet objet et le donner à la fonction fit
de votre modèle.
tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])
De cette façon, vous avez donné votre objet de rappel à la fonction. Il sera exécuté pendant la formation et générera des fichiers pouvant être utilisés avec tensorboard.
Si vous souhaitez visualiser les fichiers créés lors de la formation, lancez-le dans votre terminal
tensorboard --logdir path_to_current_dir/Graph
J'espère que cela t'aides !
Voici comment vous utilisez le rappel TensorBoard :
from keras.callbacks import TensorBoard
tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
write_graph=True, write_images=False)
# define model
model.fit(X_train, Y_train,
batch_size=batch_size,
epochs=nb_Epoch,
validation_data=(X_test, Y_test),
shuffle=True,
callbacks=[tensorboard])
Changement
keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
write_graph=True, write_images=True)
à
tbCallBack = keras.callbacks.TensorBoard(log_dir='Graph', histogram_freq=0,
write_graph=True, write_images=True)
et définir votre modèle
tbCallback.set_model(model)
Courez dans votre terminal
tensorboard --logdir Graph/
Si vous travaillez avec la bibliothèque Keras et souhaitez utiliser tensorboard pour imprimer vos graphiques d’exactitude et d’autres variables, suivez les étapes ci-dessous.
étape 1: initialisez la bibliothèque de rappel keras pour importer tensorboard à l'aide de la commande ci-dessous
from keras.callbacks import TensorBoard
étape 2: Incluez la commande ci-dessous dans votre programme juste avant la commande "model.fit ()".
tensor_board = TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
Remarque: Utilisez "./graph". Il va générer le dossier graphique dans votre répertoire de travail actuel, évitez d’utiliser "/ graph".
étape 3: Incluez le rappel Tensorboard dans "model.fit ()". L’échantillon est donné ci-dessous.
model.fit(X_train,y_train, batch_size=batch_size, epochs=nb_Epoch, verbose=1, validation_split=0.2,callbacks=[tensor_board])
étape 4: Exécutez votre code et vérifiez si votre dossier graphique est présent dans votre répertoire de travail. si les codes ci-dessus fonctionnent correctement, vous aurez le dossier "Graph" dans votre répertoire de travail.
étape 5: Ouvrez Terminal dans votre répertoire de travail et tapez la commande ci-dessous.
tensorboard --logdir ./Graph
étape 6: Maintenant, ouvrez votre navigateur Web et entrez l’adresse ci-dessous.
http://localhost:6006
Après avoir entré, la page Tensorbaord s'ouvrira où vous pourrez voir vos graphiques de différentes variables.
Voici du code:
K.set_learning_phase(1)
K.set_image_data_format('channels_last')
tb_callback = keras.callbacks.TensorBoard(
log_dir=log_path,
histogram_freq=2,
write_graph=True
)
tb_callback.set_model(model)
callbacks = []
callbacks.append(tb_callback)
# Train net:
history = model.fit(
[x_train],
[y_train, y_train_c],
batch_size=int(hype_space['batch_size']),
epochs=EPOCHS,
shuffle=True,
verbose=1,
callbacks=callbacks,
validation_data=([x_test], [y_test, y_test_coarse])
).history
# Test net:
K.set_learning_phase(0)
score = model.evaluate([x_test], [y_test, y_test_coarse], verbose=0)
histogram_freq=2
est le paramètre le plus important à régler lors de l'appel de ce rappel: il définit un intervalle d'époques pour appeler le rappel, dans le but de générer moins de fichiers sur les disques.
Voici donc un exemple de visualisation de l'évolution des valeurs de la dernière convolution lors de l'entraînement une fois vu dans TensorBoard, sous l'onglet "Histogrammes" (et j'ai trouvé que l'onglet "Distributions" contenait des graphiques très similaires, mais inversés sur le côté):
Si vous souhaitez voir un exemple complet en contexte, vous pouvez vous référer à ce projet open-source: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-1
Il y a peu de choses.
Premièrement, pas /Graph
mais ./Graph
Deuxièmement, lorsque vous utilisez le rappel TensorBoard, transmettez toujours les données de validation, car sans elles, elles ne seraient pas démarrées.
Troisièmement, si vous souhaitez utiliser autre chose que des résumés scalaires, vous ne devez utiliser que la méthode fit
, car fit_generator
ne fonctionnera pas. Ou vous pouvez réécrire le rappel pour travailler avec fit_generator
.
Pour ajouter des rappels, ajoutez-le simplement à model.fit(..., callbacks=your_list_of_callbacks)
Vous devriez jeter un coup d'œil à Losswise ( https://losswise.com ), qui dispose d'un plugin pour Keras qui est plus facile à utiliser que Tensorboard et qui possède quelques fonctionnalités supplémentaires. Avec Losswise, vous utiliseriez simplement from losswise.libs import LosswiseKerasCallback
puis callback = LosswiseKerasCallback(tag='my fancy convnet 1')
et vous voilà prêt (voir https://docs.losswise.com/#keras-plugin ) .
Si vous utilisez google-colab, une simple visualisation du graphique serait:
import tensorboardcolab as tb
tbc = tb.TensorBoardColab()
tensorboard = tb.TensorBoardColabCallback(tbc)
history = model.fit(x_train,# Features
y_train, # Target vector
batch_size=batch_size, # Number of observations per batch
epochs=epochs, # Number of epochs
callbacks=[early_stopping, tensorboard], # Early stopping
verbose=1, # Print description after each Epoch
validation_split=0.2, #used for validation set every each Epoch
validation_data=(x_test, y_test)) # Test data-set to evaluate the model in the end of training
Vous avez écrit log_dir='/Graph'
vouliez-vous dire plutôt ./Graph
? Vous l'avez envoyé à /home/user/Graph
pour le moment.
Créez le rappel Tensorboard:
from keras.callbacks import TensorBoard
from datetime import datetime
logDir = "./Graph/" + datetime.now().strftime("%Y%m%d-%H%M%S") + "/"
tb = TensorBoard(log_dir=logDir, histogram_freq=2, write_graph=True, write_images=True, write_grads=True)
Passez le rappel Tensorboard à l’appel approprié:
history = model.fit(X_train, y_train, epochs=200, callbacks=[tb])
Lors de l’exécution du modèle, si vous obtenez une erreur Keras de
"Vous devez saisir une valeur pour le tenseur d'espace réservé"
essayez de réinitialiser la session Keras avant la création du modèle en procédant comme suit:
import keras.backend as K
K.clear_session()