作者:CSDN @ _养乐多_
本文将介绍一个深度学习实验管理与训练可视化的工具,Swanlab。由西安电子科技大学的团队开发,它能够方便地进行训练可视化、多实验对比、超参数记录、大型实验管理和团队协作,并支持用网页链接的方式分享你的实验。
如下图所示,可以方便的实时跟踪训练日志,如损失、精度等。
文章目录
一、swanlab介绍
swanlab官网:https://swanlab.cn/
SwanLab 是一个深度学习实验管理与训练可视化的工具,它由西安电子科技大学的团队开发。SwanLab 结合了 Weights & Biases (W&B) 和 TensorBoard 的特点,为机器学习和深度学习的研究人员和开发者提供了强大的功能来管理他们的实验和可视化训练过程。
SwanLab 旨在简化机器学习实验的管理和可视化流程,提高研究效率。
主要特点:
-
训练可视化: SwanLab 提供了丰富的可视化功能,可以帮助用户监控模型训练过程中的各项指标,如损失函数的变化、准确率等。
-
多实验对比: 用户可以轻松地比较不同实验之间的结果,这对于超参数调优非常有用。
-
超参数记录: 自动记录每次实验的超参数设置,便于追踪和复现实验结果。
-
大型实验管理: 支持管理大量的实验,即使是在分布式环境中也能有效地进行协调。
-
环境信息保存: 自动记录实验时所用的环境信息,包括软件版本等,有助于实验的可复现性。
-
离线模式: 支持离线模式,在没有网络连接的情况下也可以使用,数据可以在之后同步到服务器。
-
广泛兼容性: 基于 Python 构建,支持 Python 3.8 及以上版本。
-
数据可视化模块: 提供了从简单线条图到复杂多媒体图表(如图像、音频、3D 模型)的多种可视化方式。
-
易用性: 提供了一个直观的用户界面,便于用户操作。
二、安装
- 安装: 可以通过 pip 安装 SwanLab:
pip install swanlab
- 登录: 安装成功以后会主动提示你填写API key:
swanlab login
API key就在快速入门指南页面,
三、示例
SwanLab 可以与多种机器学习框架集成,比如 Transformers、Ultralytics 的 YOLO、PaddleClas 等。下面是一些使用示例:
3.1 与 Ultralytics 的 YOLO 集成
from ultralytics import YOLO
from swanlab.integration.ultralytics import add_swanlab_callback
# 加载模型
model = YOLO("yolov8n.pt")
# 添加 SwanLab 回调
add_swanlab_callback(model)
# 开始训练
model.train(data='path/to/data.yaml', epochs=5, workers=0)
3.2 与 Transformers 集成
from transformers import BertForSequenceClassification
from swanlab.integration.huggingface import SwanLabCallback
# 创建模型
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
# 添加 SwanLab 回调
trainer.add_callback(SwanLabCallback())
# 开始训练
trainer.train()
3.3 初始化一个实验
import swanlab
# 初始化一个实验
run = swanlab.init(project="MNIST-example", experiment_name="ResNet18", config={
"model": "ResNet18"})
四、完整测试示例
import swanlab
import random
# 初始化一个新的swanlab run类来跟踪这个脚本
swanlab.init(
# 设置将记录此次运行的项目信息
project="my-awesome-project",
# 跟踪超参数和运行元数据
config={
"learning_rate": 0.02,
"architecture": "CNN",
"dataset": "CIFAR-100",
"epochs": 10
}
)
# 模拟训练
epochs = 10
offset = random.random() / 5
for epoch in range(2, epochs):
acc = 1 - 2 ** -epoch - random.random() / epoch - offset
loss = 2 ** -epoch + random.random() / epoch + offset
# 向swanlab上传训练指标
swanlab.log({
"acc": acc, "loss": loss})
# [可选] 完成训练,这在notebook环境中是必要的
swanlab.finish()