一、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标量指标数据记录展示
标量数据我们不仅会在图表中进行可视化,还会在实验卡片的指标栏进行记录
4.2文本类型数据记录展示
文本类型数据,我们自带了字数统计功能
4.3音频类型数据记录展示
音频数据我们支持在云端直接播放并提供wav格式的直接下载
4.4图像类型数据记录展示
图像类型数据同样支持一键下载
五、log命令总结
swanlab.log
命令的用法其实非常简单,只需要仔细阅读以上教程,再多多实践,就可以轻松掌握。
如果有更多关于设置的需求与思考也欢迎在评论区留言,或者在我们的GitHub官方开源库提交issue,我们团队一定会全力满足用户的使用需求。