我正在尝试访问存储在 Tensorboard 文件中的一些数据。我不想在浏览器中使用 Tensorboard GUI 打开它,而是直接在 python 脚本中打开它,以便能够进行进一步的计算。
我当前的代码:
file = # here, filename is provided
ea = event_accumulator.EventAccumulator(event_file[0])
ea.Reload()
print(ea.Tags())
现在,我的标签(ea.Tags())是……。像这样:
{'histograms': [], 'scalars': [], 'tensors': ['observable1', 'observable2' ], ...}
首先有趣的是,我的可观测数据不是保存在“标量”中,而是保存在“张量”中。我现在如何访问这些可观察量? 我希望这两个可观察量中的每一个都给出一个数组/值列表(这就是我感兴趣的),并且可能还有一些与张量相关的数据,例如形状、数据类型等。
我已经尝试使用访问张量
x=ea.Tensors("observable1")
print(x[0])
或类似的,但我被困在那里,因为输出是某物。像这样:
TensorEvent(wall_time=1234567890.987654, step=123, tensor_proto=dtype: DT_FLOAT
tensor_shape {
}
tensor_content: "\123Y\123@"
)
和 x 的固定长度似乎是 10,这在某种程度上出乎我的意料。有人有主意吗?我在互联网上找到的所有解释都只涉及 Tensorboard 文件中的标量
前提是之前已经这样写过
from torch.utils.tensorboard import SummaryWriter
tensorboard_writer=SummaryWriter(log_dir=logpath)
tensorboard_writer.add_scalar("loss_val", loss, parameter)
此示例将提取分数:
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator
event_acc = EventAccumulator(logpath, size_guidance={"scalars": 0})
event_acc.Reload()
for scalar in event_acc.Tags()["scalars"]:
w_times, step_nums, vals = zip(*event_acc.Scalars(scalar))
也许写入标量没有成功?
这篇文章相当老了,但发布在这里以供将来参考。
例如,要访问
tensor_content
中的 observable1
,请执行
x = ea.Tensors("observable1")[0].tensor_proto.tensor_content[0]
和
x
将包含您想要的二进制形式的值。
根据这个答案,我改变了
ea = event_accumulator.EventAccumulator(event_file[0])
到
ea = event_accumulator.EventAccumulator(
event_file[0],
size_guidance={event_accumulator.TENSORS: 0})
)
我能够获取所有(超过 10 个)记录值。
鉴于您的
TensorEvent
是dtype=DT_FLOAT
,您可以解析tensor_proto
中的tensor_content
二进制数据,如下所示:
from tensorboard.backend.event_processing import event_accumulator
import struct
ea = event_accumulator.EventAccumulator("your_event_file_path")
events = ea.Tensors("observable1")
event_proto = events[0].tensor_proto
value = struct.unpack('f', event_proto.tensor_content)[0]
在您的情况下,内容应解析为
3.3023269176483154
。