16
votes

Comment représenter graphiquement le modèle tf.keras dans Tensorflow-2.0?

J'ai mis à jour Tensorflow 2.0 et il n'y a pas de tf.summary.FileWriter("tf_graphs", sess.graph) . Je regardais à travers d'autres questions StackOverflow à ce sujet et ils ont dit d'utiliser tf.compat.v1.summary etc Il doit sûrement y avoir un moyen de représenter graphiquement et de visualiser un modèle tf.keras dans Tensorflow version 2. De quoi s'agit-il? Je recherche une sortie de tensorboard comme celle ci-dessous. Merci!

entrez la description de l'image ici


0 commentaires

4 Réponses :


7
votes

Selon la documentation , vous pouvez utiliser Tensorboard pour visualiser des graphiques une fois que votre modèle a été formé.

Tout d'abord, définissez votre modèle et exécutez-le. Ensuite, ouvrez Tensorboard et passez à l'onglet Graphique.


Exemple compilable minimal

Cet exemple est tiré de la documentation. Tout d'abord, définissez votre modèle et vos données.

%tensorboard --logdir logs

Ensuite, entraînez votre modèle. Ici, vous devrez définir un rappel que Tensorboard utilisera pour visualiser les statistiques et les graphiques.

# Define the Keras TensorBoard callback.
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

# Train the model.
model.fit(
    train_images,
    train_labels, 
    batch_size=64,
    epochs=5, 
    callbacks=[tensorboard_callback])

Après l'entraînement, dans votre cahier, exécutez

# Relevant imports.
%load_ext tensorboard

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

# Define the model.
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'])

(train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0

Et passez à l'onglet Graphique dans la barre de navigation:

entrez la description de l'image ici

Vous verrez un graphique qui ressemble beaucoup à ceci:

entrez la description de l'image ici


6 commentaires

Existe-t-il un moyen de le visualiser sans l'entraîner au préalable?


@ColinSteidtmann J'ai examiné plusieurs problèmes GitHub et le consensus semble être que cela n'est pas pris en charge pour les modèles keras pour le moment en raison de l'exécution rapide activée par défaut.


Merde, merci pour la recherche. Je sais que c'est toujours en version bêta, donc je serai juste patient.


Ce n'est pas tout à fait correct, vous pouvez convertir en graphique et visualiser le modèle sans l'entraîner. Voir ma réponse


@nessuno, vous devez toujours exécuter le modèle avec une certaine quantité de données. Certes, il s'agit d'un seul échantillon, cela me semble un peu piraté. J'ai cherché pendant des heures et je n'ai rien trouvé de plus simple que cela et j'ai abandonné.


Oui c'est vrai. L'exécution du modèle est nécessaire car le graphique est construit en traçant l'exécution, mais il n'est pas nécessaire de former le modèle, vous pouvez simplement utiliser tf.function et exécuter la passe avant (si vous êtes intéressé à ne voir que cette partie, et pas le graphique de la boucle d'entraînement)



21
votes

Vous pouvez visualiser le graphique de n'importe tf.function fonction décorée tf.function , mais vous devez d'abord tracer son exécution.

Visualiser le graphe d'un modèle Keras signifie visualiser sa méthode d' call .

Par défaut, cette méthode n'est pas tf.function décorée et vous devez donc tf.function l'appel de modèle dans une fonction correctement décorée et l'exécuter.

import tensorflow as tf

model = tf.keras.Sequential(
    [
        tf.keras.layers.Flatten(input_shape=(28, 28)),
        tf.keras.layers.Dense(32, activation="relu"),
        tf.keras.layers.Dropout(0.2),
        tf.keras.layers.Dense(10, activation="softmax"),
    ]
)


@tf.function
def traceme(x):
    return model(x)


logdir = "log"
writer = tf.summary.create_file_writer(logdir)
tf.summary.trace_on(graph=True, profiler=True)
# Forward pass
traceme(tf.zeros((1, 28, 28, 1)))
with writer.as_default():
    tf.summary.trace_export(name="model_trace", step=0, profiler_outdir=logdir)


4 commentaires

C'est une excellente réponse, merci! Je ne peux cependant toujours pas accéder aux informations d'exécution dans TensorBoard. Oui, le profileur est défini sur true. Une idée?


Le profilage lui-même. Tensorboard n'affiche aucune information d'exécution, par exemple la durée d'exécution des nœuds de mon graphique ou la consommation de mémoire. Si cela vous est montré, il y a peut-être un autre problème pour moi.


Ma seule suggestion est de lire ce guide tensorflow.org/tensorboard/tensorboard_profiling_keras et d'utiliser Chromium / Chrome (oui, les autres navigateurs ne peuvent pas être utilisés car le profil utilise certaines parties de chrome)


ProfilerNotRunningError: Cannot stop profiling. No profiler is running. sur Windows. Une aide s'il vous plaît?



1
votes

Voici ce qui fonctionne pour moi en ce moment (TF 2.0.0), basé sur le code tf.keras.callbacks.TensorBoard :

# After model has been compiled
from tensorflow.python.ops import summary_ops_v2
from tensorflow.python.keras.backend import get_graph
tb_path = '/tmp/tensorboard/'
tb_writer = tf.summary.create_file_writer(tb_path)
with tb_writer.as_default():
    if not model.run_eagerly:
        summary_ops_v2.graph(get_graph(), step=0)


2 commentaires

Qu'est-ce que tb_writer ?


Un objet tf.summary.SummaryWriter. Edité le code pour le définir



0
votes

Une autre option consiste à utiliser ce site Web: https://lutzroeder.github.io/netron/

qui génèrent un graphe avec un fichier .h5 ou .tflite.

Le dépôt github sur lequel il est basé peut être trouvé ici: https://github.com/lutzroeder/netron


0 commentaires