Wandb教程(2)

Wandb教程(2)

Wand的推荐用法

Config:

config的配置方法:

直接赋值

​ 在初始化 wandb 之前或之后,可以创建一个字典或使用 wandb.config 的属性赋值方式来设置配置项。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 方法一:直接创建一个字典并赋值给 wandb.config
config = {
"learning_rate": 0.001,
"batch_size": 64,
"num_epochs": 100,
"model_architecture": "ResNet18",
"dataset_version": "v2.1"
}
wandb.config.update(config)

# 方法二:直接使用 wandb.config 属性赋值
wandb.config.learning_rate = 0.001
wandb.config.batch_size = 64
wandb.config.num_epochs = 100
wandb.config.model_architecture = "ResNet18"
wandb.config.dataset_version = "v2.1"
使用 wandb.init() 参数

​ 在调用 wandb.init() 时,可以直接传入一个字典作为 config 参数,将配置信息一次性设定好:

1
2
3
4
5
6
7
8
9
config = {
"learning_rate": 0.001,
"batch_size": 64,
"num_epochs": 100,
"model_architecture": "ResNet18",
"dataset_version": "v2.1"
}

wandb.init(project="my_project", config=config)
使用 wandb.config.update()

在训练过程中,如果需要动态调整或添加配置项,可以使用 wandb.config.update() 方法:

1
2
3
4
5
initial_config = {"learning_rate": 0.001, "batch_size": }
wandb.config.update(initial_config)
# 训练过程中动态调整或添加配置
midway_updates = {"learning_rate": 0.0005, "dropout_rate": 0.3}
wandb.config.update(midway_updates)

config的使用

Wandb推荐将模型配置等参数传入train函数,用config去配置模型,例如模型的优化器可以如下配置:

方法一(显得有些繁琐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 wandb.config = {
"project_name": "your_project_name",
"optim_type": "Adam",
"learning_rate": 0.001,
"momentum": 0.9 # 仅对 SGD 有效
}

model = YourModelClass() # 替换为您的实际模型类
# 根据 wandb.config 创建优化器
if wandb.config.optim_type == "Adam":
optimizer = torch.optim.Adam(model.parameters(), lr=wandb.config.learning_rate)
elif wandb.config.optim_type == "SGD":
optimizer = torch.optim.SGD(model.parameters(), lr=wandb.config.learning_rate, momentum=wandb.config.momentum)
else:
raise ValueError(f"Unsupported optimizer type: {wandb.config.optim_type}")
方法二(可能不是那么优美)
1
optimizer = torch.optim.__dict__[config.optim_type](params=model.parameters(), lr=config.lr)

​ 同时在train函数里面进行wandb.init,这样在同一次运行时多次记录训练信息时就很方便,例如将选取的算子信息写入config,再通过config传入train函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def train(config):
model = model(cofig.downsampler, cofig.upsampler)
wandb.init(
project='project1',
name=cofig.downsampler + cofig.upsampler,
save_code=True
)

for i in range config.epoch:
...
wand.log(...)
wandb.finish()


for downsapmler in ['max-pooling', 'NN', 'convolution']:
for upsampler in ['max-unpooling', 'bilinear']:
config.downsampler = downsampler
config.upsampler = upamppler
train(config)

name的命名:

​ 这里的name指的是wandb.init(name=‘’)的name,推荐有两种命名方式:

使用时间命名:

1
2
nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
wandb.init(project=config.project_name, config=config.__dict__, name=nowtime, save_code=True)

使用config的配置命名:

​ 这种情况适用于比如网格搜索模型参数的时候比较参数的好坏:

1
wandb.init(project=config.project_name, config=config.__dict__, name=config.str, save_code=True)

版本管理

​ 除了可以记录实验日志传递到 wandb 网站的云端服务器并进行可视化分析,wandb还能够将实验关联的数据集,代码和模型保存到 wandb 服务器非常便于对实验结果进行复现我们可以通过 wandb.log_artifact的方法来保存任务的关联的重要成果,例如dataset, code和 model,并进行版本管理

注:artifact翻译为"工件",是指软件开发中产出的最终成果.

Case分析

​ 利用 wandb.Table 我们可以在 wandb的 dashboard 进行交互式可视化的 case分析