Как вручную создать tf.Summary()
Я часто хочу записывать переменные python - в отличие от tf-тензоров.
В документах говорится, что "вы можете передать буфер протокола tf.Summary
, который вы заполняете своими собственными данными", но нет документов для tf.Summary
, и я не мог понять, как его использовать.
Кто-нибудь знает, как создать Scalar summary таким образом?
Ответы
Ответ 1
Вы можете создать объект tf.Summary
в своей программе Python и записать его в тот же объект tf.train.SummaryWriter
, который принимает ваши итоговые результаты, полученные TensorFlow, с помощью SummaryWriter.add_summary()
.
Класс tf.Summary
представляет собой оболочку буфера протокола Python для буфера протокола Summary
. Каждый Summary
содержит список буферов протокола tf.Summary.Value
, каждый из которых имеет тег и либо "простое" (скалярное) значение с плавающей запятой, и , гистограмма или аудио фрагмент, Например, вы можете сгенерировать скалярное резюме из объекта Python следующим образом:
writer = tf.train.SummaryWriter(...)
value = 37.0
summary = tf.Summary(value=[
tf.Summary.Value(tag="summary_tag", simple_value=value),
])
writer.add_summary(summary)
Ответ 2
Если вы хотите записать значение python, вам нужно создать местозаполнитель, который должен быть загружен при запуске tf.Summary
op.
Здесь код отключен
value_ = tf.placeholder(tf.float32, [])
summary_op = tf.scalar_summary("value_log", value_)
my_python_variable = 10
# define everything else you need...
# ...
with tf.Session() as sess:
for i in range(0, 10):
sess.run(summary_op, feed_dict={value_: my_python_variable*i})
Ответ 3
Мне нужно было сделать много обновлений для пользовательской сводной переменной во время обучения, поэтому я применил мою так:
До цикла:
writer = tf.summary.FileWriter(log_folder)
accuracy = None
accuracy_summary = tf.Summary()
accuracy_summary.value.add(tag='accuracy', simple_value=accuracy)
Внутри цикла:
if i%20000 == 0:
accuracy = get_accuracy()
accuracy_summary.value[0].simple_value = accuracy
writer.add_summary(accuracy_summary, i)
Я предполагаю, что индексы value
находятся в том порядке, в котором переменные были добавлены в сводку.