Каков рекомендуемый способ регистрации потерь регуляризации для TensorBoard 2.1? - PullRequest
2 голосов
/ 18 февраля 2020

Я хочу иметь возможность отслеживать эволюцию потерь регуляризации моей модели с TensorBoard (я использую TensorFlow 2.1).

До сих пор я настроил tf.keras.callbacks.TensorBoard обратный вызов передан tf.keras.Model.fit. Это позволяет мне контролировать общую потерю и скорость обучения:

enter image description here

Обратный вызов регистрирует их по умолчанию.

Однако общее Убыток состоит из нескольких членов (например, потери регуляризации). Как я могу легко контролировать их?

  1. tf.keras.callbacks.TensorBoard, кажется, не поддерживает это. Правильно?
  2. Я нашел этот раздел do c: Регистрация пользовательских скаляров . Тем не менее, пример показывает, как отслеживать скаляр на конце каждой эпохи , пока я ищу что-то, что собирает скаляры на конце каждой партии и записывает среднее значение на конце каждой эпохи .
  3. Я думаю, что могу написать собственный обратный вызов, но можно ли избежать затрат времени на это?
  4. Есть ли другое решение?

Отсюда мой вопрос Каков рекомендуемый способ регистрации потерь регуляризации для TensorBoard 2.1?

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете создать свой собственный обратный вызов, унаследовав от обратного вызова TensorBoard и добавив нужные количества вручную.

Вот код, который я использую для этой цели. В этом случае вы получите отдельный график для потерь регуляризации каждого слоя.

class CustomTBCallback(keras.callbacks.TensorBoard):
    def _log_metrics(self, logs, prefix, step):
        for layer in self.model.layers:
            if layer.losses:
                logs["reg_%s" % layer.name] = tf.reduce_sum(layer.losses)
        super()._log_metrics(logs, prefix, step)

К сожалению, это несколько странно, поскольку полагается на приватную функцию _log_metrics, которая может меняться в разных версиях tenorflow. Я использовал это с TF 2.0.

...