TensorFlow:正在打开SummaryWriter写入的日志数据

slsn1g29  于 2023-01-26  发布在  其他
关注(0)|答案(9)|浏览(186)

summaries and TensorBoard上完成本教程后,我已经能够使用TensorBoard成功保存和查看数据。是否可以使用TensorBoard以外的其他工具打开此数据?
顺便说一下,我的应用程序是进行非策略学习的。我目前正在使用SummaryWriter保存每个状态-操作-奖励元组。我知道我可以手动存储/训练这些数据,但我认为使用TensorFlow内置的日志记录功能来存储/加载这些数据会更好。

f0brbegy

f0brbegy1#

截至2017年3月,EventAccumulator工具has been moved从Tensorflow核心迁移到Tensorboard后端。您仍然可以使用它从Tensorboard日志文件中提取数据,如下所示:

from tensorboard.backend.event_processing.event_accumulator import EventAccumulator
event_acc = EventAccumulator('/path/to/summary/folder')
event_acc.Reload()
# Show all tags in the log file
print(event_acc.Tags())

# E. g. get wall clock, number of steps and value for a scalar 'Accuracy'
w_times, step_nums, vals = zip(*event_acc.Scalars('Accuracy'))
xpcnnkqh

xpcnnkqh2#

很简单,数据实际上可以导出到TensorBoard中Events选项卡下的.csv文件中,例如,可以加载到Python中的Pandas Dataframe 中。请确保选中 Data download links 框。
如需更自动化的方法,请查看TensorBoard自述文件:
如果您希望导出数据以在其他地方(例如iPython Notebook)进行可视化,也可以直接依赖TensorBoard用于加载数据的底层类:python/summary/event_accumulator.py(用于从单次运行加载数据)或python/summary/event_multiplexer.py(用于从多次运行加载数据,并使其保持有序)。这些类加载事件文件组,丢弃因TensorFlow崩溃而“孤立”的数据,并按标签组织数据。
作为另一种选择,有一个脚本(tensorboard/scripts/serialize_tensorboard.py),它将像TensorBoard一样加载一个logdir,但将所有数据作为json写入磁盘,而不是启动服务器。该脚本设置为创建“假TensorBoard后端”进行测试,因此它有点粗糙。

4si2a6ki

4si2a6ki3#

我认为数据是以protobufs RecordReader格式编码的。要从文件中获得序列化字符串,您可以使用py_record_reader或使用TFRecordReader操作构建一个图形,并使用Event schema将这些字符串反序列化为protobuf。如果您获得了一个工作示例,请更新此q,因为我们似乎缺少这方面的文档。

cdmah0mi

cdmah0mi4#

我在以前的一个项目中做了一些类似的事情,正如其他人提到的,主要成分是tensorflows事件累加器

from tensorflow.python.summary import event_accumulator as ea

acc = ea.EventAccumulator("folder/containing/summaries/")
acc.Reload()

# Print tags of contained entities, use these names to retrieve entities as below
print(acc.Tags())

# E. g. get all values and steps of a scalar called 'l2_loss'
xy_l2_loss = [(s.step, s.value) for s in acc.Scalars('l2_loss')]

# Retrieve images, e. g. first labeled as 'generator'
img = acc.Images('generator/image/0')
with open('img_{}.png'.format(img.step), 'wb') as f:
  f.write(img.encoded_image_string)
41zrol4v

41zrol4v5#

您也可以使用tf.train.summaryiterator:要提取./logs文件夹中的事件,其中仅存在经典标量lracclossval_accval_loss,您可以使用以下GIST:tensorboard_to_csv.py

qvsjd97n

qvsjd97n6#

当你的tfevent文件中的数据点少于10000个时,Chris Cundy的答案很好用。但是,当你的tfevent文件中的数据点超过10000个时,Tensorboard会自动对它们进行采样,并且最多只给你10000个点。这是一个相当烦人的潜在行为,因为它没有得到很好的记录。请参见https://github.com/tensorflow/tensorboard/blob/master/tensorboard/backend/event_processing/event_accumulator.py#L186。
要绕过它并获得所有数据点,一个有点笨拙的方法是:

from tensorboard.backend.event_processing.event_accumulator import EventAccumulator

class FalseDict(object):
    def __getitem__(self,key):
        return 0
    def __contains__(self, key):
        return True

event_acc = EventAccumulator('path/to/your/tfevents',size_guidance=FalseDict())
pwuypxnk

pwuypxnk7#

对于tb version〉=2.3,你可以使用tensorboard.data.experimental.ExperimentFromDev()简化将tb事件转换为panda Dataframe 的过程。但是,它要求你将日志上传到TensorBoard.dev,这是公开的。有计划在未来将该功能扩展到本地存储日志。https://www.tensorflow.org/tensorboard/dataframe_api

njthzxwz

njthzxwz8#

您还可以使用EventFileLoader迭代通过Tensor板文件

from tensorboard.backend.event_processing.event_file_loader import EventFileLoader

for event in EventFileLoader('path/to/events.out.tfevents.xxx').Load():
    print(event)
zz2j4svz

zz2j4svz9#

令人惊讶的是,python包tb_parse还没有被提及。

相关问题