Tensorboard Graph с индивидуальным обучением l oop не включает мою модель - PullRequest
0 голосов
/ 12 апреля 2020

Я создал свой собственный l oop, как показано в руководстве по миграции TF 2 здесь .
В настоящее время я могу видеть график только для раздела --- VISIBLE --- кода ниже , Как сделать мою модель (определенную в разделе ---NOT VISIBLE---) видимой на тензорной доске?

Если бы я не использовал пользовательское обучение l oop, я мог бы пойти с документированным model.fit approach:

model.fit(..., callbacks=[keras.callbacks.TensorBoard(log_dir=logdir)])

В TF 1 этот подход был довольно простым:

tf.compat.v1.summary.FileWriter(LOGDIR, sess.graph)

В руководстве по миграции Tensorboard четко говорится ( здесь ) что:

Нет прямой записи tf.compat.v1.Graph - вместо этого используйте функции @ tf.function и trace

configure_default_gpus()
tf.summary.trace_on(graph=True)
K = tf.keras
dataset = sanity_dataset(BATCH_SIZE)

#-------------------------- NOT VISIBLE -----------------------------------------
model = K.models.Sequential([
    K.layers.Flatten(input_shape=(IMG_WIDTH, IMG_HEIGHT, IMG_CHANNELS)),
    K.layers.Dense(10, activation=K.layers.LeakyReLU()),
    K.layers.Dense(IMG_WIDTH * IMG_HEIGHT * IMG_CHANNELS, activation=K.layers.LeakyReLU()),
    K.layers.Reshape((IMG_WIDTH, IMG_HEIGHT, IMG_CHANNELS)),
])
#--------------------------------------------------------------------------------

optimizer = tf.keras.optimizers.Adam()
loss_fn = K.losses.Huber()


@tf.function
def train_step(inputs, targets):
    with tf.GradientTape() as tape:
        predictions = model(inputs, training=True)
#-------------------------- VISIBLE ---------------------------------------------
        pred_loss = loss_fn(targets, predictions)

    gradients = tape.gradient(pred_loss, model.trainable_variables)
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
#--------------------------------------------------------------------------------
    return pred_loss, predictions


with tf.summary.create_file_writer(LOG_DIR).as_default() as writer:
    for epoch in range(5):
        for step, (input_batch, target_batch) in enumerate(dataset):
            total_loss, predictions = train_step(input_batch, target_batch)

            if step == 0:
                tf.summary.trace_export(name="all", step=step, profiler_outdir=LOG_DIR)
            tf.summary.scalar('loss', total_loss, step=step)
            writer.flush()
writer.close()

Существует аналог оставшийся без ответа вопрос , где ОП не смог увидеть ни одного графика.

1 Ответ

0 голосов
/ 12 апреля 2020

Я уверен, что есть лучший способ, но я только что понял, что простой обходной путь - просто использовать существующую логику обратного вызова тензорной доски c:

tb_callback = tf.keras.callbacks.TensorBoard(LOG_DIR)
tb_callback.set_model(model) # Writes the graph to tensorboard summaries using an internal file writer

Если вы хотите, вы можете написать свой собственные резюме в тот же каталог, который он использует: tf.summary.create_file_writer(LOG_DIR + '/train').

Tensorboard Graph and Scalars

...