Используя TF2.0-nightly, я реализую класс, который уменьшает необходимость явной записи эксперимента с гиперпараметрами (параметров и метрик) для тензорной доски, заполняя внешние значения для быстрой генерации этих тестов.
Использование tf.summary.experimental.write_raw_pb () в tf file_writer по умолчанию позволяет мне регистрировать гиперпараметры и точность в конце каждого прогона, однако я также хотел бы регистрировать информацию в конце каждой эпохимодели.
Использование tennsflow.keras.callbacks.Tensorboard, чтобы сделать последнее, вызывает проблемы, когда тензорная доска пытается обновиться в реальном времени, предупреждая, что обновляются различные файлы журнала по сравнению с «текущим»,где текущим является файл на основе обратного вызова, а обновляемыми являются журналы эксперимента.
Т.е. я могу показывать HParams или гистограммы (для каждой эпохи), но не могу их кратко обновить.Кто-нибудь знает о том, как использовать как обратный вызов keras, так и tf filewriter одновременно?
ПРИМЕЧАНИЕ. Если я оставляю операцию для запуска и открытия тензорной доски задним числом, все данные отображаются без проблем, это происходит только тогда, когдапроведение экспериментов.
Пробовали обе панели инструментов Hyperparameters и Histogram / Scalars по отдельности, которые работают нормально.
Я также пытался вернуть историю каждой модели ..fit (), но могу найти только способы построения скаляров, а не векторов, которые возвращаются в history.history, которая заставляет скалярные графы перепрыгивать всев нескольких экспериментах.
Поэтому я инициализирую эксперименты с помощью self.create_experiment_summary () и создаю программу записи, которая передает ее в журналы.
exp_summary, paramNames, paramValues = self.create_experiment_summary()
root_logdir_writer = tf.summary.create_file_writer("logs/" + self.folderName)
with root_logdir_writer.as_default():
tf.summary.experimental.write_raw_pb(exp_summary.SerializeToString(), step=1)
где self.create_experiment_summary () возвращает следующее
...
return hparams_summary.experiment_pb(
hparam_infos=
[api_pb2.HParamInfo(name=w, display_name=x, type=y, domain_discrete=z) for
w, x, y, z in zip(hparamNames, hparamDesc, hparamDtype, hparamSum)],
metric_infos=[
api_pb2.MetricInfo(
name=api_pb2.MetricName(tag='Eval Accuracy'), display_name='Accuracy')
])
Затем я перехожу к передаче параметров моей модели, которая проходит через
def run(self, run_dir, hparams, session_num):
writer = tf.summary.create_file_writer(run_dir)
summary_start = hparams_summary.session_start_pb(hparams=hparams)
with writer.as_default():
accuracy, history = self.model_function(hparams, self.x_train,
self.y_train, self.x_test, self.y_test, run_dir)
summary_end = hparams_summary.session_end_pb(api_pb2.STATUS_SUCCESS)
tf.summary.scalar('Eval Accuracy', accuracy, step=1, description="The Evaluation Accuracy")
tf.summary.experimental.write_raw_pb(summary_start.SerializeToString(), step=1)
tf.summary.experimental.write_raw_pb(summary_end.SerializeToString(), step=1)
, где model_function представлена ниже, и настраивает толькоимя журнала, добавив текущий прогон в путь к каталогу.
def train_test_model(hparams, x_train, y_train, x_test, y_test, dire):
model = tf.keras.models.Sequential([
tf.keras.layers.Conv1D(32, int(hparams['c1_kernel']), 1,padding='same'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(hparams['num_units_list'], activation=hparams['activation_list']),
tf.keras.layers.Dropout(hparams['dropout_rate_list']),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer=hparams['optimizer_list'],
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
tensorLog = TensorBoard(log_dir=dire, histogram_freq=1,
write_graph=True, update_freq='epoch')
history = model.fit(x_train, y_train, epochs=2, callbacks=[tensorlog])
print("--- Evaluating")
_, accuracy = model.evaluate(x_test, y_test)
return accuracy, history
Если я закомментирую обратный вызов и удаляю его из .fit, то тензорная доска перезагружает hparams после завершения прогона и т. Д., Однако у меня больше нет гистограмм или потерь в каждой эпохе за эксперимент.