追踪媒体与对象
Aim支持多种数据源。Run参数的基本日志记录涵盖Python内置类型(如int、float、bool、bytes和str),以及这些类型任意深度的字典、列表、元组组合。
除了内置类型外,Aim还原生支持OmegaConf配置,从而简化了与Hydra运行项目的集成。
从 v3.6.0 版本开始,Aim 提供了与 activeloop/hub 数据集的集成功能。Hub 是面向 AI 的开源数据集格式。
数据追踪包括指标、图像、音频、文本和图表数据。以下是该软件包提供的完整Aim对象列表:
追踪多个值
从 v3.14.0 版本开始,Aim提供了同时追踪多个值的能力。要追踪同一上下文中不同序列的多个值,只需向track方法传递一个由 键值对组成的字典:
aim_run.track({'accuracy': 98.2, 'loss': 0.001}, context={'subset': 'train'}, step=10, epoch=1)
注意:在这种情况下,
name参数应设置为None。
更多示例
以下代码片段
from aim import Run
aim_run = Run()
metrics = {'accuracy': 0.72, 'f1': 0.99}
for metric, val in metrics.items()
aim_run.track(val, name=metric, context={'subset': 'train'})
可以简化为:
from aim import Run
aim_run = Run()
aim_run.track({'accuracy': 0.72, 'f1': 0.99}, context={'subset': 'train'})
使用Aimstack进行分布追踪
您可以使用我们的aim.Distribution对象将分布对象存储在Aim仓库中。
from aim import Distribution
aim.Distribution 接受以下参数
distribution: 用于构建aim.Distribution的类数组对象。bin_count: 可选分布直方图箱数。默认为64,最大512。
您的数据在对象初始化时会被转换为numpy.histogram。
初始化并跟踪分布的简单示例
import random
from aim import Run, Distribution
run = Run()
d = Distribution(
distribution=[random.randrange(0, 10000) for _ in range(1000)],
bin_count=250
)
run.track(d, name='dist', step=0)
使用Aim进行图像追踪
Aim允许您使用aim.Image对象来追踪图像
开始使用前,请先将Image对象导入到您的代码中。
from aim import Image
我们的Image对象底层使用了Pillow。Image对象支持以下输入作为数据源。
图片文件的路径
PIL (Pillow对象)
torch.Tensor (PyTorch张量对象)
tf.Tensor (TensorFlow 张量对象)
np.array (NumPy数组对象)
matplotlib.figure.Figure (matplotlib图形对象)
以下是一个从文件路径跟踪图像的示例
path = "~/test_image.png"
aim_image = Image(path)
Image对象还具有以下参数:
caption (:obj: `str`, optional): Optional image caption. '' by default.
format (:obj: `str`, optional): Parameter for PIL's .save() method. 'png' by default.
quality (:obj: `int`, optional): Parameter for PIL's .save() method. 85 by default.
optimize (:obj: `bool`, optional): Parameter for PIL's .save() method. False by default.
有关format、quality和optimize参数的更多信息,请参阅Pillow文档。
通过这些参数,您可以调整图像质量或转换图像格式,例如从.png转为jpeg或任何其他Pillow支持的格式
from aim import Run, Image
# Initialize a new run
run = Run()
for step in range(1000):
# Log image
path = f"~/test_image_{step}.png"
aim_image = Image(
path,
format='jpeg',
optimize=True,
quality=50
)
run.track(aim_image, name='images', step=step)
使用Aim进行音频追踪
Aim允许您使用aim.Audio对象跟踪音频数据
要开始使用,首先将Audio对象导入到您的代码中。
from aim import Audio
您可以使用Audio对象来追踪MP3、WAV和FLAC音频数据。Audio对象支持以下数据作为输入。
文件路径
原始字节
io.BytesIO流NumPy数组(仅适用于WAV音频格式)
该对象附带以下可选参数。
format (:obj:`str`): Format of the audio source. Choices are ('flac', 'mp3', 'wav')
rate (:obj:`int`): Only for WAV. Rate of the audio file, defaults to 22500
caption (:obj:`str`): Optional audio caption. An empty string by default.
跟踪WAV音频数据的完整示例。
import os.path
from aim import Run, Audio
# Initialize a new run
run = Run()
for step in range(1000):
# Log image
path = f"~/test_audio_{step}.mp3"
aim_audio = Audio(
path,
format='mp3',
caption=os.path.basename(path)
)
run.track(aim_audio, name='audios', step=step)
使用Aim进行文本追踪
Aim允许您在训练过程中跟踪文本/字符串。
开始使用前,请先将Text对象导入到您的代码中。
from aim import Text
要使用Text对象,您只需确保输入数据类型为字符串。
以下是Text用法的示例:
import random
import string
from aim import Run, Text
# Initialize a new run
run = Run()
for step in range(100):
# Generate a random string for this example
random_str = ''.join(random.choices(
string.ascii_uppercase +
string.digits, k=20)
)
aim_text = Text(random_str)
run.track(aim_text, name='text', step=step)
使用Aim跟踪图表
Aim提供了一个Figure对象,可用于追踪plotly和matplotlib图表。
开始使用前,请先将Figure对象导入到您的代码中。
from aim import Figure
您应该将Plotly Figure或matplotlib Figure作为输入源传递给Aim的Figure对象。
这是一个跟踪plotly图表的示例
import plotly.express as px
from aim import Run, Figure
# Initialize a new run
run = Run()
# First we create Plotly figure
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2])
# Now we convert it to Aim Figure
aim_figure = Figure(fig)
run.track(aim_figure, name="plotly_figures", step=0)
追踪matplotlib图表也很简单。请注意转换过程是由Plotly在底层完成的。
from aim import Run, Figure
import matplotlib.pyplot as plt
# Initialize a new run
run = Run()
# define matplotlib figure
fig = plt.figure()
plt.plot([1, 2, 3])
plt.close(fig)
# Now we convert it to Aim Figure using (Plotly's functions)
aim_figure = Figure(fig)
run.track(aim_figure, name="matplotlib_figures", step=0)
使用Aim跟踪matplotlib图表
为了使用Aim跟踪matplotlib图表,可以将matplotlib图表传递给Aim的Image或Figure对象。
将matplotlib转换为Aim Image
from aim import Run, Image
import matplotlib.pyplot as plt
run = Run()
# define matplotlib figure
fig = plt.figure()
plt.plot([1, 2, 3])
plt.close(fig)
# pass it to aim Image
aim_img = Image(fig)
run.track(aim_img, step=0, name="matplotlib_images")
将matplotlib转换为Aim Figure
请注意,转换过程由Plotly在底层完成。
from aim import Run, Figure
import matplotlib.pyplot as plt
run = Run()
# define matplotlib figure
fig = plt.figure()
plt.plot([1, 2, 3])
plt.close(fig)
aim_figure = Figure(fig)
run.track(aim_figure, step=0, name="matplotlib_figures")
使用Aim记录activeloop/hub数据集信息
Aim为hub.dataset提供了封装对象。它允许将数据集信息存储为Run参数,并可以像其他Run参数一样随时检索。以下是使用Aim记录数据集信息的示例:
import hub
from aim.sdk.objects.plugins.hub_dataset import HubDataset
from aim.sdk import Run
# create dataset object
ds = hub.dataset('hub://activeloop/cifar100-test')
# log dataset metadata
run = Run(system_tracking_interval=None)
run['hub_ds'] = HubDataset(ds)
使用Aim记录DVC元数据
如果您使用DVC对数据集进行版本控制或跟踪检查点/其他大型数据块,您可以使用Aim记录关于跟踪文件和数据集的信息。这将使您能够轻松地将数据集信息与跟踪的实验关联起来。以下是代码示例:
from aim.sdk import Run
from aim.sdk.objects.plugins.dvc_metadata import DvcData
run = Run(system_tracking_interval=None)
path_to_dvc_repo = '.'
run['dvc_info'] = DvcData(path_to_dvc_repo)
如果我们参考DVC团队提供的以下示例仓库:
运行以下命令列出仓库内容,包括由DVC和Git跟踪的文件和目录。
$ git clone https://github.com/iterative/example-get-started
$ cd example-get-started
$ dvc list .
.dvcignore
.github
.gitignore
README.md
data
dvc.lock
dvc.yaml
model.pkl
params.yaml
prc.json
roc.json
scores.json
src
如果我们在同一个代码仓库上应用之前的代码片段 - 可以观察到相同的信息被添加到运行参数中。
{
'dvc_info.dataset.source': 'dvc',
'dvc_info.dataset.tracked_files': [
'.dvcignore', '.github', '.gitignore',
'README.md', 'data', 'dvc.lock',
'dvc.yaml', 'model.pkl', 'params.yaml',
'prc.json', 'roc.json', 'scores.json', 'src'
]
}
使用Aim记录huggingface/datasets数据集信息
Aim为datasets提供了封装对象。它允许将数据集信息存储为Run参数,并可以像其他Run参数一样随时检索。以下是使用Aim记录数据集信息的示例:
from datasets import load_dataset
from aim import Run
from aim.hf_dataset import HFDataset
# create dataset object
dataset = load_dataset('rotten_tomatoes')
# store dataset metadata
run = Run()
run['datasets_info'] = HFDataset(dataset)