追踪媒体与对象

Aim支持多种数据源。Run参数的基本日志记录涵盖Python内置类型(如intfloatboolbytesstr),以及这些类型任意深度的字典、列表、元组组合。

除了内置类型外,Aim还原生支持OmegaConf配置,从而简化了与Hydra运行项目的集成。

v3.6.0 版本开始,Aim 提供了与 activeloop/hub 数据集的集成功能。Hub 是面向 AI 的开源数据集格式。

数据追踪包括指标、图像、音频、文本和图表数据。以下是该软件包提供的完整Aim对象列表:

追踪多个值

v3.14.0 版本开始,Aim提供了同时追踪多个值的能力。要追踪同一上下文中不同序列的多个值,只需向track方法传递一个由 value> 键值对组成的字典:

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.

有关formatqualityoptimize参数的更多信息,请参阅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对象,可用于追踪plotlymatplotlib图表。

开始使用前,请先将Figure对象导入到您的代码中。

from aim import Figure

您应该将Plotly Figurematplotlib 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的ImageFigure对象。

将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)