本节主要记录使用wandb记录训练曲线以及上传一些格式的数据将其展示在wandb中以便分析的方法,略过注册安装部分(可使用pip intall wandb安装,注册相关issue可上网搜索),文章着重于wandb的基本用法。

初始化

首先创建在wandb页面中中创建需要可视化的project,然后在代码里面只要指定好team和project,便可以把数据传输到对应的project下:

import wandb
# notes:一些文字描述实验发现或备注,也可以在wandb网页的individual experiment panel中添加
# dir:本地文件写入的路径,(环境变量WANDB_DIR或wandb.init的关键字参数dir)
run_dir = Path("../results") / all_args.project_name / all_args.experiment_name
if not run_dir.exists():
os.makedirs(str(run_dir))
wandb.init(config=all_args,
project=your_project_name,
entity=your_team_name,
notes=socket.gethostname(),
name=all_args.experiment_name + "_" + str(all_args.seed),
dir=run_dir,
group=all_args.scenario_name,
job_type="training",
reinit=True)

基本使用

wandb的核心功能就是跟踪训练过程,展示训练流程以供我们观察展示和分析,该节以黄世宇代码示例图为例,说明wandb如何使用wandb.log()做到展示包括训练曲线、图片、matplotlib可视化结果、视频、表格、甚至html在内的不同结构的数据。(显示媒体文件时不需要在本地进行文件读写,可以直接用wandb的函数将展示对象处理为对应的格式就可以显示。)

训练曲线展示

total_step_num = 1000
for step in range(total_step_num):
wandb.log({'random_curve':step/100+random.random()},step=step)
wandb.log({'log_curve': math.log(step+1)},step=step)
wandb.finish()

Matplotlib可视化展示

# figure就是一个图,axes表示图上的一个画图区域,一个图上可以有多个画图区域,即一个图上可以有多个子图
# 用函数gcf()与gca()分别得到当前的figure与axes。(get current figure, get current axes)
x = np.arange(1, 11)
for step in range(4):
frames = []
y = step * x + step
plt.title("Matplotlib Demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x, y)
wandb.log({"plt":wandb.Plotly(plt.gcf())},step=step)

图片展示

env = gym.make("PongNoFrameskip-v4")
env.reset()
for step in range(4):
frames = [] # 每个step输出一个由4张图片组成的列表
for i in range(4):
obs,r,done,_=env.step(env.action_space.sample())
# wandb.Image将numpy arrays或PILImage的实例转化为PNG以供展示
frames.append(wandb.Image(obs, caption="Pong"))
wandb.log({"frames": frames},step=step)
if done:
env.reset()

视频展示

env = gym.make("PongNoFrameskip-v4")
for episode in range(3):
env.reset()
done = False
frames = []
while not done:
for _ in range(4):
obs,r,done,_=env.step(env.action_space.sample())
if done:
break
frames.append(obs)
sequence = np.stack(frames, -1).transpose(3,2,0,1) # time, channels, height, width
print(sequence.shape)
video = wandb.Video(sequence, fps=10, format="gif",caption="Pong")
wandb.log({"video": video},step=episode)

表格展示

columns = ["Name", "Age", "Score"]

data = [["ZhuZhu", 1, 0], ["MaoMao",2,1]]
table = wandb.Table(data=data, columns=columns)
wandb.log({"table": table})
wandb.finish()

展示html

html1 = wandb.Html('<a href="http://tartrl.cn">TARTRL</a>')
html2 = wandb.Html(open('test.html'))
wandb.log({"html1": html1,"html2":html2})
wandb.finish()

参考

wandb使用教程(一):基础用法 - 知乎 (zhihu.com)

如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】的更多相关文章

  1. 源码分析篇 - Android绘制流程(二)measure、layout、draw流程

    performTraversals方法会经过measure.layout和draw三个流程才能将一帧View需要显示的内容绘制到屏幕上,用最简化的方式看ViewRootImpl.performTrav ...

  2. (转)linux内存源码分析 - 内存回收(整体流程)

    http://www.cnblogs.com/tolimit/p/5435068.html------------linux内存源码分析 - 内存回收(整体流程) 概述 当linux系统内存压力就大时 ...

  3. Solr4.8.0源码分析(5)之查询流程分析总述

    Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilt ...

  4. 老李推荐:第5章2节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动流程概览

    老李推荐:第5章2节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动流程概览   每个应用都会有一个入口方法来供操作系统调用执行,Monkey这个应用的入口方法就 ...

  5. HDFS源码分析DataXceiver之整体流程

    在<HDFS源码分析之DataXceiverServer>一文中,我们了解到在DataNode中,有一个后台工作的线程DataXceiverServer.它被用于接收来自客户端或其他数据节 ...

  6. Python 控制流代码混淆简介,加大别人分析你代码逻辑和流程难度

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  7. JVM源码分析之JVM启动流程

      原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十四篇. 今天呢!灯塔君跟大家讲: JVM源码分析之JVM启动流程 前言: 执行Java类的main方法,程序就能运 ...

  8. Yii2 源码分析 入口文件执行流程

    Yii2 源码分析  入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...

  9. Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总

    Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...

随机推荐

  1. 98. 验证二叉搜索树 前序遍历解法以及后续遍历解法(go语言)

    leetcode题目 98. 验证二叉搜索树 前序遍历 最简洁的答案版本,由于先判断的是根节点,所以直接判断当前root的值v,是否满足大于左子树最大,小于右子树最小,然后再遍历左子树,右子树是否是这 ...

  2. 分布式下Session一致性问题

    一.Session一致性问题 1.1 什么是Session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分 ...

  3. linux篇-linux下ffmpeg安装

    1最近自己搭建的公司服务端转化视频不可以,我想应该是ffmpeg的问题,头痛 准备这两个源码包 2安装,先解压 ffmpeg-4.1.4.tar.bz2 yasm-1.3.0.tar.gz 3先安装y ...

  4. BUUCTF刷题记录(更新中...)

    极客大挑战 2019]EasySQL-1 直接通过输入万能密码:' or 1=1#实现注入: 思考:服务端sql语句应该为:select * from users where username='xx ...

  5. 面试突击51:为什么单例一定要加 volatile?

    单例模式的实现方法有很多种,如饿汉模式.懒汉模式.静态内部类和枚举等,当面试官问到"为什么单例模式一定要加 volatile?"时,那么他指的是为什么懒汉模式中的私有变量要加 vo ...

  6. [学习笔记] pd_ds黑科技

    https://www.cnblogs.com/jiqimin/p/11226809.html 丢个链接,跑路 // Author: wlzhouzhuan #pragma GCC optimize( ...

  7. 配置中心的设计-nacos vs apollo

    简介 前面我们分析了携程的 apollo(见 详解apollo的设计与使用),现在再来看看阿里的 nacos. 和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理.分环境 ...

  8. 解决python 导入selenium 库后自动化运行成功但是报错问题

    本章节开始进入自动化的基础教学了,首先我们要对我们的工具有一定的熟练使用程度,做自动化常用的工具一个是搭建 RobotFramework自动化框架,另外一个便是我们最常用的python 工作原理是比较 ...

  9. ExtJS直接加载HTML页面

    ExtJS直接加载HTML页面 说明 ExtJS组件很不错,但再完美也有需要其他组件的时候,比如有时候就需要引入已经写好的HTML页面.主要的方法如下. 测试环境:ExtJS 7.4 使用html配置 ...

  10. [pwn基础]Pwntools学习

    目录 [pwn基础]Pwntools学习 Pwntools介绍 Pwntools安装 Pwntools常用模块和函数 pwnlib.tubes模块学习 tubes.process pwnlib.con ...