Можно ли регистрировать выходы (также известные как активации) разных слоев, в пределах модели 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()
Здесь значение шага конечно известно. Но есть две проблемы в использовании последнего фрагмента для регистрации выходных данных слоев моделей во время обучения:
- Каждый тензор в модели должен быть оценен после подгонки еще раз
- Другие значения текут через тензор после подгонки
Для меня решение кажется очень неестественным, и я думаю, я, возможно, что-то наблюдаю.