怎么查看tensorboard文件夹下的log文件
Создано: 4 мая 2025 г.
Создано: 4 мая 2025 г.
怎么查看tensorboard文件夹下的log文件
要查看 TensorBoard 日志文件(通常是 events.out.tfevents...
之类的文件),最方便、最常用的方式就是直接用 TensorBoard 本身来可视化;如果你只是想快速「看一眼」文件里记录了什么,也可以用一些脚本工具读取。下面给你几种常用方法,按场景从简单到进阶排个序:
bashcd /path/to/your/project
bashtensorboard --logdir=./tensorboard # 假设日志文件都在 tensorboard/ 目录
TensorBoard 2.15.1 at http://localhost:6006/ (Press CTRL+C to quit)
在浏览器里访问那个 URL ,就能看到所有标量、损失曲线、图结构、直方图等。小贴士:
--port
可以改端口;--bind_all
可以让局域网其他机器访问。
如果你更想在脚本里读出具体数值,比如做二次分析或画自定义图,可以用 TensorBoard 官方的 event_accumulator
,或第三方库 tensorboardX
。下面给个最常用的官方示例(需要 tensorboard
>= 2.x):
pythonfrom tensorboard.backend.event_processing import event_accumulator log_path = "./tensorboard" # 你的 LogDir ea = event_accumulator.EventAccumulator( log_path, size_guidance={ # 限制每种事件的加载数量;0 表示全部加载 event_accumulator.SCALARS: 0, event_accumulator.IMAGES: 0, event_accumulator.HISTOGRAMS: 0, }) ea.Reload() # 解析事件文件 # 列出所有 scalar tag print("Scalar tags:", ea.Tags()['scalars']) # 取出 tag="train/loss" 的所有 (step, value) loss_events = ea.Scalars('train/loss') for e in loss_events: print(e.step, e.value)
python%load_ext tensorboard %tensorboard --logdir ./tensorboard --port 6006
现象 | 可能原因 | 解决办法 |
---|---|---|
浏览器打开后空白 / 不显示曲线 | 日志目录写错,或训练脚本还没写入事件文件 | 确认 --logdir 路径;训练代码里要有 SummaryWriter / tf.summary 写日志 |
端口被占用 | 本机已有其它服务占用 6006 | tensorboard --logdir=... --port 7007 |
同一目录下混入过期事件文件导致报错 | 版本迁移不兼容 | 清理旧日志,或给每次训练用独立子目录 |
最简单:
tensorboard --logdir=你的日志目录
,然后浏览器看;
想脚本里读数:用event_accumulator
或tensorboardX
解析events.out.tfevents.*
文件。
希望能帮你快速找到并查看日志!如果在使用过程中还有具体报错或数据解析需求,随时再问~
wandb login的账号是根据conda环境变化的吗
不会——wandb login
跟你当前激活的 conda 环境并没有直接关系。
原因在于 W&B 把登录信息写在与你的 Python 虚拟环境无关的「用户级」位置:
存储方式 | 说明 |
---|---|
~/.netrc | 保存 API key (旧版/兼容做法)GitHub |
~/.config/wandb/settings | 保存默认实体、项目等偏好设置 |
环境变量 WANDB_API_KEY | 临时或脚本级覆盖;只对 当前 shell / 进程 生效Weights & Biases Documentation Weights & Biases Documentation |
因此:
只要你在某个终端里执行过 wandb login
并把 key 写进 ~/.netrc
(或用 Web 登录写进 ~/.config/wandb
),以后无论切到哪个 conda env、甚至换成别的虚拟环境,都默认沿用同一账号。
如果你希望 不同 conda 环境用不同账号,有两种常见做法
对另一环境同理。只影响当前 shell 及其子进程,不写磁盘。bash# 在 env_A 下 conda activate env_A export WANDB_API_KEY=key_for_account_A python train.py
wandb login --relogin
输入另一账号的 key,或手动编辑/备份 ~/.netrc
。如果想「登出」,删除相应文件或变量即可
bashunset WANDB_API_KEY # 清掉临时环境变量 sed -i '/api.wandb.ai/d' ~/.netrc # 从 netrc 去掉 wandb 那行 rm -rf ~/.config/wandb # 可选:重置本地配置
wandb login
默认是 用户层面的持久登录,跟你切换哪一个 conda 环境没有必然联系;要让不同环境用不同账号,就用 WANDB_API_KEY
环境变量或者 wandb login --relogin
来显式控制即可。
if iteration % 1000 == 0 and 5000 <= iteration <= debug_params["saving_iterations"][-1]:
with torch.no_grad():
psnrs_iter = []
dataset_test = dataset
dataset_test.source_path = '/home/myData/storage/xmh_code/multiscaleGS/data/mill19/rubble-pixsfm/val'
gs_dataset_test = ScaleDataset(scene.getTestCameras(), scene, dataset_test, pipe)
data_loader_test = CacheDataLoader(gs_dataset_test, batch_size=1, max_cache_num=21, shuffle=False, num_workers=1)
textfor img_idx, (cam_info, gt_image) in enumerate(data_loader_test): image, _, _, _ = render_scale(gaussians, cam_info, pipe, background, scale_factors, 3) psnrs_iter.append(psnr(image[None, ...], gt_image[-1][None, ...].cuda())) mean_psnr_iter = torch.tensor(psnrs_iter).mean().item() print(f"[Iteration {iteration}] PSNR: {mean_psnr_iter:.7f}") 维护一个列表保存每1000个iteration的psnr 然后最后画一个表格折线图 横轴是iteration数 纵轴是psnr的值 把这个图表保存到指定文件夹下面
下面给出一个最小改动的示例,把 PSNR 值按 1 000 步收集到 psnr_history
列表里,训练结束后用 matplotlib 画折线图,并把 图像文件 + 对应 CSV 表格 都保存到指定目录:
pythonimport os import torch import pandas as pd import matplotlib.pyplot as plt # ------------- 在训练循环外先准备一个列表 ------------- psnr_history = [] # [(iter, psnr), ...] # ------------- 你原来的训练循环片段 ------------- for iteration in range(total_iters): ... if iteration % 1000 == 0 and 5000 <= iteration <= debug_params["saving_iterations"][-1]: with torch.no_grad(): psnrs_iter = [] dataset_test = dataset dataset_test.source_path = '/home/myData/storage/xmh_code/multiscaleGS/data/mill19/rubble-pixsfm/val' gs_dataset_test = ScaleDataset(scene.getTestCameras(), scene, dataset_test, pipe) data_loader_test = CacheDataLoader(gs_dataset_test, batch_size=1, max_cache_num=21, shuffle=False, num_workers=1) for img_idx, (cam_info, gt_image) in enumerate(data_loader_test): image, _, _, _ = render_scale(gaussians, cam_info, pipe, background, scale_factors, 3) psnrs_iter.append(psnr(image[None, ...], gt_image[-1][None, ...].cuda())) mean_psnr_iter = torch.tensor(psnrs_iter).mean().item() print(f"[Iteration {iteration}] PSNR: {mean_psnr_iter:.7f}") # --------- 记录下来 ---------- psnr_history.append((iteration, mean_psnr_iter)) # ------------- 训练结束后可视化并保存 ------------- save_dir = "/home/myData/storage/xmh_code/multiscaleGS/plots" # 改成自己想要的路径 os.makedirs(save_dir, exist_ok=True) # 转成 DataFrame,既方便保存也方便画图 df = pd.DataFrame(psnr_history, columns=["iteration", "psnr"]) # 折线图 plt.figure(figsize=(8, 4)) plt.plot(df["iteration"], df["psnr"], marker="o") plt.title("PSNR over Iterations") plt.xlabel("Iteration") plt.ylabel("PSNR") plt.grid(True) plt.tight_layout() plt.savefig(os.path.join(save_dir, "psnr_curve.png"), dpi=300) plt.close() # 同时把数值表格也存一下 df.to_csv(os.path.join(save_dir, "psnr_values.csv"), index=False) print(f"✅ 已保存折线图和 CSV 到: {save_dir}")
步骤 | 重点 |
---|---|
1. 初始化 | psnr_history = [] 放到训练循环之前。 |
2. 记录 | 每次评价均值 mean_psnr_iter 后 append((iteration, mean_psnr_iter)) 。 |
3. 可视化 | 训练结束后一次性调用 matplotlib 画线;用 marker='o' 让折点清晰。 |
4. 保存 | plt.savefig(...) 保存 PNG,高分辨率可调 dpi ;df.to_csv(...) 方便以后再分析。 |
5. 路径 | 目录不存在用 os.makedirs(..., exist_ok=True) 自行创建。 |
这样代码逻辑清晰、改动最小,后续如果想在训练中实时更新图表,也可以把画图部分挪到验证段落里(比如每 N 个 iteration 重新绘制并覆盖旧文件)。祝实验顺利!