版本:tensorboard 2.10.0
问题:文件夹下明明有events文件,但用tensorboard命令却无法显示。
例如:
原因:有可能是文件路径太长了,导致系统无法读取文件。在win系统中规定,目录的绝对路径不得超过260字符,虽然在win10的1607及以上版本中支持更大路径长度,但并非所有应用都能支持长路径。在上面的例子中,我的数据目录是“D:\xxx\files\syn_1x1_uniform_1_20s\tensorboard_drl\train\rlhf_h32_16_alphap2_gammap92_bs64_memo1e5_rand_start10batch_round1e5\hold_steps\events.out.tfevents.1699542553.autodl-container-744e4495ab-36126ec8.1799.0”,共262字符,可能是我当前tensorboard版本限制或其他原因无法读取。
解决方案:
- 把events文件保存在浅层目录中,路径不超过260字符,再重新用tensorboard命令查看
- 使用event_accumulator直接从events读取数据,避开tensorboard命令调用过程。以下为简单示例,仅供参考,关键函数为event_accumulator.EventAccumulator。
from tensorboard.backend.event_processing import event_accumulator
import os
current_path = os.path.dirname(os.path.abspath(__file__)) # 当前代码文件所在文件夹的绝对路径
file_path = os.path.join(current_path, '../files/syn_1x1_uniform_1_20s/tensorboard_drl/fix_init10/events.out.tfevents.1689403580.99a6dc21500a.1450.0') # 数据相对路径
ea = event_accumulator.EventAccumulator(file_path) # 不限制读取数据点数
ea.Reload()
print(ea.scalars.Keys())
key=ea.scalars.Keys()[0]
val = ea.scalars.Items(key)
print(len(val))
print([(i.step, i.value) for i in val])
参考文献:
- Windows路径字符长度限制问题