Wandb教程(2)
Wand的推荐用法
Config:
config的配置方法:
直接赋值
在初始化 wandb
之前或之后,可以创建一个字典或使用 wandb.config
的属性赋值方式来设置配置项。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 config = { "learning_rate" : 0.001 , "batch_size" : 64 , "num_epochs" : 100 , "model_architecture" : "ResNet18" , "dataset_version" : "v2.1" } wandb.config.update(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 } model = YourModelClass() 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分析