Регистрируйте выходы (активации) промежуточных слоев в `model.fit`, используя TF 2 - PullRequest
0 голосов
/ 31 марта 2020

Можно ли регистрировать выходы (также известные как активации) разных слоев, в пределах модели tf.keras, одновременно обучая ее с помощью model.fit(…)?

Праймер:

Имея модель типа

inp = tf.keras.layers.Input((10,))
state = Dense(10)(inp)
outp = Dense(10)(state)
model = tf.keras.Model(inp, outp)

Я бы хотел создать гистограмму значений, проходящих через state в процедуре model.fit(…).

Неудовлетворительное решение:

Следующий код работает для построения гистограмм:

# -*- coding: utf-8 -*-
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Dense


# Summary Layer
class Layer(tf.keras.layers.Layer):
    def __init__(self, writer):
        super(Layer, self).__init__()
        self.writer = writer

    def call(self, input):
        with self.writer.as_default():
            tf.summary.histogram("hist", input, step=0)
        return input


# Data
x, y = np.random.rand(10000, 10), np.random.rand(10000, 10)
writer = tf.summary.create_file_writer("logs")

# Model
inp = tf.keras.layers.Input((10,))
state = Dense(10)(inp)
state = Layer(writer)(state)
outp = Dense(10)(state)
model = tf.keras.Model(inp, outp)
model.compile("sgd", "mse")

# Fit
model.fit(x, y, epochs=3)

Однако здесь аргумент step для tf.summary.histogram постоянно устанавливается равным 0. Таким образом, все графики отображаются в одном и том же step.

Вопрос:

Поскольку global_step прошло с tf 2, я не вижу решения, как узнать значение шага при настройке tf.summary.histogram. Есть ли обходное решение или нестандартное решение этой проблемы?

Спасибо за вашу помощь, я действительно ценю это. Всего самого наилучшего!

Приложение:

Читая документацию, я нашел что-то вроде:

writer = tf.summary.create_file_writer("/tmp/mylogs")
with writer.as_default():
  for step in range(100):
    # other model code would go here
    tf.summary.scalar("my_metric", 0.5, step=step)
    writer.flush()

Здесь значение шага конечно известно. Но есть две проблемы в использовании последнего фрагмента для регистрации выходных данных слоев моделей во время обучения:

  1. Каждый тензор в модели должен быть оценен после подгонки еще раз
  2. Другие значения текут через тензор после подгонки

Для меня решение кажется очень неестественным, и я думаю, я, возможно, что-то наблюдаю.

...