web-dev-qa-db-fra.com

Distributions et histogrammes TensorBoard avec Keras et fit_generator

J'utilise Keras pour former un CNN à l'aide de la fonction fit_generator.

Il semble que ce soit problème conn que TensorBoard n'affiche pas les histogrammes et les distributions dans cette configuration.

Quelqu'un a-t-il trouvé un moyen de le faire fonctionner de toute façon?

20
Jonathan Roth

Il n'y a pas de moyen simple de le brancher avec une seule ligne de code, vous devez écrire vos résumés à la main.

La bonne nouvelle est que ce n'est pas difficile et que vous pouvez utiliser le code de rappel TensorBoard dans Keras comme référence: https://github.com/fchollet/keras/blob/master/keras/callbacks.py#L537

Fondamentalement, écrivez une fonction, par ex. write_summaries(model) et appelez-la quand vous voulez écrire vos résumés (par exemple juste après votre fit_generator())

Dans votre fonction write_summaries(model) utilisez tf.summary, histogram_summary et d'autres fonctions récapitulatives pour enregistrer les données que vous souhaitez voir sur le tensorboard.

Si vous ne savez pas exactement comment, consultez le didacticiel officiel: https://www.tensorflow.org/get_started/summaries_and_tensorboard et ce grand exemple de MNIST avec des résumés: https: // github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py

10
bartgras

Je crois que l'explication de Bartgras est remplacée dans les versions plus récentes de Keras (j'utilise Keras 2.2.2). Pour obtenir des histogrammes dans Tensorboard, tout ce que j'ai fait était le suivant, (où bg est une classe de conflit de données qui expose un générateur pour gb.training_batch(); gb.validation_batch() mais n'est PAS un générateur ):

NAME = "Foo_{}".format(datetime.now().isoformat(timespec='seconds')).replace(':', '-')

tensorboard = keras.callbacks.TensorBoard(
    log_dir="logs/{}".format(NAME),
    histogram_freq=1,
    write_images=True)

callbacks = [
    tensorboard
]

history = model.fit_generator(
    bg.training_batch(),
    validation_data=bg.validation_batch(),
    epochs=EPOCHS,
    steps_per_Epoch=bg.steps_per_Epoch,
    validation_steps=bg.validation_steps,
    verbose=1,
    shuffle=False,
    callbacks=callbacks)
2
Jay Borseth