目录

wandb是什么

wandb安装与注册登陆

wandb常用函数

wandb.init()

wandb.config()

wandb.log()和wandb.Image()

具体使用方法

后传


wandb是什么

wandb是Weight & Bias的缩写,这是一个与Tensorboard类似的参数可视化平台。不过,相比较TensorBoard而言,Wandb更加的强大,主要体现在以下的几个方面:

  1. 复现模型:Wandb更有利于复现模型。
    这是因为Wandb不仅记录指标,还会记录超参数和代码版本。
  2. 自动上传云端:
    如果你把项目交给同事或者要去度假,Wandb可以让你便捷地查看你制作的所有模型,你就不必花费大量时间来重新运行旧实验。
  3. 快速、灵活的集成:
    只需5分钟即可把Wandb加到自己的项目。
    下载Wandb免费的开源Python包,然后在代码中插入几行,以后你每次运行模型都会得到记录完备的指标和记录。
  4. 集中式指示板:
    Wandb提供同样的集中式指示板。不管在哪里训练模型,不管是在本地机器、实验室集群还是在云端实例;
    这样就不必花时间从别的机器上复制TensorBoard文件。
  5. 强大的表格:
    对不同模型的结果进行搜索、筛选、分类和分组。
    可以轻而易举地查看成千上万个模型版本,并找到不同任务的最佳模型。

详细内容:Wandb:模型训练最强辅助 - 知乎

wandb安装与注册登陆

1.在终端里运行如下代码用于安装wandb库。

pip install wandb

2. 在安装好wandb库之后,输入如下代码进行wandb的登陆。

如果之前没有使用过wanbd的话,在运行wandb login之前最好先去wandb的官网注册一个账号,这样在输入API key时可以方便不少。点这里注册

wandb login

在输入上面的代码之后终端里就会出现这两行,这时候需要做的就是点开第一行的链接,将里面的神秘代码复制粘贴到第二行里,敲一下回车,就完成了wandb的登陆。

测试代码:

import wandbconfig = dict (learning_rate = 0.01,momentum = 0.2,architecture = "CNN",dataset_id = "peds-0192",infra = "AWS",
)wandb.init(project="detect-pedestrians",notes="tweak baseline",tags=["baseline", "paper1"],config=config,
)

打开运行结果里有火箭那一行的链接,浏览器中出现如下结果就说明成功了。

wandb常用函数

wandb.init()

这个函数的作用与平常定义类里面的init函数作用类似,都是起初始化的作用。在官方文档里面,init中包含20多个作用不同的参数,我从这20多个里面挑了几个自认为比较重要的参数进行具体的说明。官方文档:wandb.init - Documentation

1.project:字符串格式,这个参数用于定义你的项目名称,wandb在运行的过程中会自动帮你创建一个项目文件,将所有项目名称相同的文件都放在一起。

2.name:字符串格式,表示具体的名称,不写的话也可以,官方文档中说不定义具体名称的工程系统会自动使用两个随机单词进行命名,为了方便记忆以及防止出现例如green-wood-250之类的奇怪名字,还是定义一下比较好。

3.conifg:见wandb.config()。

4.resume:用于设置可恢复行为,通俗的理解就是当遇见意外中断时是否可继续。通常设置为默认None。

wandb.init(project='project',name='name',config=config,resume='None')

wandb.config()

wandb.config()用于保存训练配置,这些配置包含超参数、数据集名称或模型类型等输入设置,以及其他自变量。在使用的时候可以在wandb.init()中就进行对config的定义,这时候就能够直接对config内容进行输入。如果在init中没有设置conifg,那么就使用wandb.config.update()进行具体内容的输入。官方文档:wandb.config - Documentation

#init中定义了config
config=dic(learing rate=0.1,batch size=2,epoch=50)
#init中没有定义config
wandb.config.update(dic(learing rate=0.1,batch size=2,epoch=50))

wandb.log()和wandb.Image()

wandb.log()会将数据记录到当前的历史记录,换句话说就是每次运行到这里,系统就会将log内的参数值自动上传更新,一般数据会直接绘制成表格。wandb.Image()用于图像的显示,numpy格式的数组或者PIL实例转化为PNG,从而在网页上直接显示出来。

官方文档:wandb.log - Documentation & wandb.Imgae的我没有找到

wandb.log({'loss': loss, 'epoch': epoch, 'learning rate': cur_lr,'images': wandb.Image(images.float()),'masks': {'true': wandb.Image(targets.float()),'pred': wandb.Image(pred.float())}})

具体使用方法

一般wandb都是写在网络的Train函数里,这里我就只放一个Train函数来举例了。大家可以照葫芦画瓢,把这个应用到自己的网络里。

首先,导入wandb库。

import os
import argparse
import time
import shutil
import wandb     #wandb库import numpy as np
import torch
import torch.utils.data as data
import torch.backends.cudnn as cudnnfrom torchvision import transforms
from data_loader import get_segmentation_dataset
from models.fast_scnn import get_fast_scnn
from utils.loss import MixSoftmaxCrossEntropyLoss, MixSoftmaxCrossEntropyOHEMLoss
from utils.lr_scheduler import LRScheduler
from utils.metric import SegmentationMetric

然后,找到合适的地方进行wandb的初始化和config内容的设置。通常写在train这个函数里面,不过也有例外,这时候就需要仔细看看代码了。比如我改的这个就是需要设置在main函数里面的。

if __name__ == '__main__':args = parse_args()test = wandb.init(project="Fast-SCNN", resume="allow")test.config.update(dict(epoch=args.epochs, lr=args.lr, batch_size=args.batch_size))trainer = Trainer(args)if args.eval:print('Evaluation model: ', args.resume)trainer.validation(args.start_epoch)else:print('Starting Epoch: %d, Total Epochs: %d' % (args.start_epoch, args.epochs))trainer.train()

数据显示部分要找到合适的位置,基本上放在train函数里面的for循环中就基本不会有太大问题了,最多就是在显示图片的时候仔细查看一下,输入的格式是否符合wandb.Image的需求,防止在使用的过程中报错。

    def train(self):cur_iters = 0start_time = time.time()for epoch in range(self.args.start_epoch, self.args.epochs):self.model.train()for i, (images, targets) in enumerate(self.train_loader):cur_lr = self.lr_scheduler(cur_iters)for param_group in self.optimizer.param_groups:param_group['lr'] = cur_lrimages = images.to(self.args.device)targets = targets.to(self.args.device)outputs = self.model(images)loss = self.criterion(outputs, targets)pred = torch.argmax(outputs[0], 1)test.log({'loss': loss, 'epoch': epoch, 'learning rate': cur_lr})test.log({'images': wandb.Image(images.float()),'masks': {'true': wandb.Image(targets.float()),'pred': wandb.Image(pred.float()),}})self.optimizer.zero_grad()loss.backward()self.optimizer.step()cur_iters += 1if cur_iters % 10 == 0:print('Epoch: [%2d/%2d] Iter [%4d/%4d] || Time: %4.4f sec || lr: %.8f || Loss: %.4f' % (epoch, args.epochs, i + 1, len(self.train_loader),time.time() - start_time, cur_lr, loss.item()))if self.args.no_val:# save every epochsave_checkpoint(self.model, self.args, is_best=False)else:self.validation(epoch)save_checkpoint(self.model, self.args, is_best=False)

运行结果:

大功告成!

后传

近期本人所在的某洛可可式实验室内开始了内卷这一不良风气,但由于我们研一的除了以K神、W神、H神为首的几位神明之外基本都是彩笔,不能内卷论文,于是大家纷纷开始效仿R神开始内卷CSDN。这篇文章一方面是记录一下自己的学习成果,另一方面也希望能给大伙提供一些小小的帮助。

wandb使用方法以及具体设置相关推荐

  1. linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题

    linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题 参考文章: (1)linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 M ...

  2. 【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Groovy 中的 Closure 闭包中 , 直接调用外部对象的方法 , 会报错 ; class Test {def fun() {print ...

  3. Spring AOP根据JdbcTemplate方法名动态设置数据源

    2019独角兽企业重金招聘Python工程师标准>>> 说明:现在的场景是,采用数据库(Mysql)复制(binlog)的方式在两台不同服务器部署并配置主从(Master-Slave ...

  4. Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声

    Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声 一.Android来电铃声默认设置的实现方法 Andoird默认来电铃声的设置方法为修改build/target/product/ ...

  5. android代码实现手机加速功能,神奇的安卓手机提速方法 只需设置两步立即提速70%以上...

    原标题:神奇的安卓手机提速方法 只需设置两步立即提速70%以上 6月份各大国产手机品牌相继推出自己的旗舰机,尤其是vivo前几天发布了屏占比高达91%的vivo NEX手机,而接下来OPPO也要发布F ...

  6. idea方法注释模板设置完了,不显示

    idea方法注释模板设置完成之后,写了一个方法,但是上面的注释没有自动生成, 此时在方法上面 另起一行, 输入 add(输入add字母就行),然后按下tab键,注释就自动生成了.

  7. html密保问题设置,QQ密保设置方法_怎么设置QQ密保详细教程【图文】-太平洋电脑网PConline-太平洋电脑网...

    我们都知道在QQ申请成功之后,为了QQ账号的安全,我们可以设置密保问题,当我们下次更改密码的时候就需要输入密保问题才可以更改,这样当QQ被盗的时候,想要更改密码也不是那么的容易,同时也可以保护我们的Q ...

  8. 计算机的低配置的cpu,绝地求生低配电脑CPU负担低设置方法汇总 怎么样设置对cpu压力小...

    很多玩家都玩过绝地求生或者想玩一下绝地求生,但是发现自己电脑的配置好像玩起来有点卡,甚至个别电脑会出现cpu过载的情况,那到底是怎么回事呢,这里小编就来教一下大家绝地求生低配电脑CPU负担低设置方法汇 ...

  9. IDEA方法注释模板设置

    IDEA类和方法注释模板设置 1.File–>Settings–>Editor–>Live Templates (1)新建组:命名为userDefine (2)新建模板:选中你刚才创 ...

最新文章

  1. 平安、招行、工行、微众、网商们怎么都在布局卫星物联网?
  2. 识别SDN中的安全隐患
  3. 〖Windows〗Linux的Qt程序源码转换至Windows平台运行,编码的解决
  4. 类型参数作为约束 where T : U 的作用
  5. 从零开始使用Nadam进行梯度下降优化
  6. 心电信号频谱图低通Matlab,心电信号处理分析.ppt
  7. 最适合编程训练的三大OJ(从易到难)
  8. 如何把很多照片拼成一张照片_如何将多张图片合成一个PDF文件
  9. 常规设置——SDKMAN
  10. WFP实现侧边栏导航菜单
  11. matlab 固态 机械_电脑是固态+机械硬盘好??纯固态硬盘好?
  12. tlc5615 c语言程序,第10章 TLC5615数模转换器DAC
  13. 最新-安装Windows与Ubuntu双系统
  14. Bilibili视频-对比学习论文综述【论文精读】
  15. 第二单元 The Opera Singer
  16. 工欲善其事,必先利其器,电脑上这些软件堪称惊艳
  17. Android安卓开发基础-Button与ImageButton
  18. 2011年7月9日参加51CTO活动Linux系统安全
  19. 嵌入式C语言学习第三天
  20. lammps数据后处理:python绘制应力应变曲线 附程序代码

热门文章

  1. vb.net mysql 查询,mysql-vb.net查询以显示数据表的特定行[基本]
  2. Python实训day4
  3. 第一定律VR助力马克思主义学院完成高校思政课改
  4. Unity 抛物线 弹道(一)
  5. 10年老师傅总结的CAD绘图命令,让你的工资从3000到1W!
  6. AcWing-C/C++语法基础【合集1】
  7. AI-数据与模型匹配(面对数据该怎么选择合适的模型?)
  8. 天池大赛 - 特征提取 总结
  9. 解决报错dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
  10. 2年Java开发工作经验面试总结