【SwanLab】SwanLab.log详解和效果展示

一、log命令介绍

在使用SwanLab记录模型实验时,我们首先需要通过swanlab.init()创建一个SwanLab实验,然后通过swanlab.log()将数据记录到当前的实验中,最后通过swanlab.finish()命令关闭当前的实验。

swanlab.log 负责实验的数据记录,可以说是用好SwanLab最关键的内容

二、log命令使用示例

在使用swanlab.log()时,我们可以根据需求记录我们的实验数据,根据数据类型的不同可以分为标量指标、文本、图像、音频(后续将提供支持视频数据的上传支持)

run = swanlab.init(
    # 设置项目
    project="datalog",
    # 实验名称
    experiment_name = "datalogtest"
    # 实验描述
    description = "实验数据类型上传"
    # 跟踪超参数与实验元数据
    config={
        "learning_rate": 0.01,
        "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上传标量指标数据
  run.log({"acc": acc, "loss": loss})
  
# 向swanlab上传文本数据
text = swanlab.Text("an awesome text.") 
run.log({"text_examples": text})

# 向swanlab上传图像数据
random_image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8) 
image = swanlab.Image(random_image, caption="random image")
run.log({"image_examples": image})

# 向swanlab上传音频数据
white_noise = np.random.randn(2, 100000)
audio = swanlab.Audio(white_noise, caption="white_noise")
run.log({"image_examples": audio})

三、log命令全解析

在以下内容中我们将分两个部分对log命令进行解析,第一部分是log自身的用法,第二部分是log支持的数据类型的用法。

3.1log命令

log命令包含两个参数,data和step,data参数接收的就是实际记录的内容,step参数接收的就是可视化的横轴步数

data : Dict[str, DataType],必选参数
传入的数据必须是字典,字典的键必须是带有 0-9、a-z、A-Z、" “、”_“、”-“、”/" 的字符串。
字典的值必须是浮点数(float)、整型数(int) 或 swanlab.data.BaseType(BaseType就是文本,图像,音频等数据类型)

step: int,可选参数
step参数传入的数据必须是整型数(int)

3.2标量指标数据

标量指标数据就是浮点数(float)、整型数(int) ,以字典形式传入SwanLab后会自动绘制成可视化的图表

# 模拟训练
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})

3.3文本类型数据

文本类型数据就是一些文本内容,通过swanlab.Text定义,同时支持规定文本内容的标题

text = swanlab.Text("an awesome text.",caption="test text") 
swanlab.log({"text_examples": text})

`

3.4图片类型数据

图片类型数据支持非常强大,同时支持图像文件,Numpy数组与PIL图像,这代表你可以轻松记录生成的numpy数组内容,或者轻松将Matplotlib绘制的PIL图表上传到SwanLab。

支持传入的参数有data_or_path,mode, caption,size

data_or_path:Union[str, np.ndarray, PILImage.Image],必选参数
这个参数用于接收图像文件路径、numpy数组、或者PIL图像。Image类将判断接收的数据类型做相应的转换。

mode:str,可选参数,默认为"RGB“
这个参数用于接收图像的颜色模式,如"L"、“RGB”、"RGBA"等。完整解释请参阅:Pillow mode
caption:str,可选参数
这个参数用于设置图像的标签,从而在实验看板中展示图像时进行标记。

file_type:str,可选参数
这个参数用于设置图片的格式,可选[‘png’, ‘jpg’, ‘jpeg’, ‘bmp’],默认为’png’

size:(Union[int, list, tuple]),可选参数
这个参数用于设置图像的尺寸,默认保持原图尺寸。

放缩规则为:

  • 默认: 不对图像做任何缩放

  • size为int类型: 如果最长边超过size, 则将最长边设为size, 另一边等比例缩放; 否则不缩放

  • size为list/tuple类型: (int, int): 将图像缩放到宽为size[0], 高为size[1] (int, None): 将图像缩放到宽为size[0], 高等比例缩放 (None, int): 将缩放缩放到高为size[1], 宽等比例缩放

# 向swanlab上传图像数据
random_image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8) 
image = swanlab.Image(random_image, caption="random image")
swanlab.log({"image_examples": image})

3.5音频类型数据

音频类型数据支持传入的参数有data_or_path, sample_rate与capiton。

data_or_path: Union[str, np.ndarray],必选参数
这个参数允许传入音频文件路径和numpy数组。Audio类将判断接收的数据类型做相应的转换。

sample_rate:int,可选参数,默认为44100
这个参数用于设置音频的采样率,默认值为44100.

caption:str,可选参数
这个参数用于设置音频的标签,从而在实验看板中展示音频时进行标记。

white_noise = np.random.randn(2, 100000)
audio = swanlab.Audio(white_noise, caption="white_noise")
run.log({"image_examples": audio})

四、log命令效果展示

在接下来的部分,我们会提供一个可用的python脚本,并具体展示各个参数在可视化页面的效果。

import random
import swanlab
import numpy as np
import matplotlib.pyplot as plt

# 初始化一个新的swanlab run类来跟踪这个脚本
run = swanlab.init(
    # 设置项目
    project="datalog",
    # 实验名称
    experiment_name = "datalogtest",
    # 实验描述
    description = "实验数据类型上传",
    # 跟踪超参数与实验元数据
    config={
        "learning_rate": 0.01,
        "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})
  
# 向swanlab上传文本数据
text = swanlab.Text("an awesome text.",caption="test text") 
swanlab.log({"text_examples": text})

# 向swanlab上传图像数据,包含放缩与Matplotlib图表
random_image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8) 
image = swanlab.Image(random_image, caption="random image")
swanlab.log({"image_examples": image})

im_examples = []
im1 = swanlab.Image(random_image, size=512)
im_examples.append(im1)
# [512, 256, 3]

im2 = swanlab.Image(random_image, size=(512, 512))
im_examples.append(im2)
# [512, 512, 3]

im3 = swanlab.Image(random_image, size=(None, 1024))
im_examples.append(im3)
# [2048, 1024, 3]

im4 = swanlab.Image(random_image, size=(256, None))
im_examples.append(im4)
# [256, 128, 3]
swanlab.log({"image_examples":im_examples})

# 定义横纵坐标的数据 
x = [1, 2, 3, 4, 5] 
y = [2, 3, 5, 7, 11] 
# plt创建折线图 
plt.plot(x, y) 
# 添加标题和标签 
plt.title("Examples") 
plt.xlabel("X-axis") 
plt.ylabel("Y-axis") 
# 记录plt 
swanlab.log({"image_examples": swanlab.Image(plt)})


# 向swanlab上传音频数据
white_noise = np.random.randn(2, 100000)
audio = swanlab.Audio(white_noise, caption="white_noise")
swanlab.log({"audio_examples": audio})

# [可选] 完成训练,这在notebook环境中是必要的
swanlab.finish()



4.1标量指标数据记录展示

标量数据我们不仅会在图表中进行可视化,还会在实验卡片的指标栏进行记录

image.png

image.png

4.2文本类型数据记录展示

文本类型数据,我们自带了字数统计功能
image.png

image.png

4.3音频类型数据记录展示

音频数据我们支持在云端直接播放并提供wav格式的直接下载
image.png

4.4图像类型数据记录展示

图像类型数据同样支持一键下载
image.png

image.png
image.png

五、log命令总结

swanlab.log命令的用法其实非常简单,只需要仔细阅读以上教程,再多多实践,就可以轻松掌握。

如果有更多关于设置的需求与思考也欢迎在评论区留言,或者在我们的GitHub官方开源库提交issue,我们团队一定会全力满足用户的使用需求。

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值