aim 跟踪字典的工作原理与文档中描述的不符,

brc7rcf0  于 1个月前  发布在  其他
关注(0)|答案(3)|浏览(31)

### 🐛 Bug

嘿!
当我尝试记录一个 `dict` 时,我得到

self.run.track(
File "/home/hendrik/miniconda3/envs/tag/lib/python3.8/site-packages/aim/sdk/run.py", line 432, in track
self._track_impl(value, track_time, name, step, epoch, context=context)
File "/home/hendrik/miniconda3/envs/tag/lib/python3.8/site-packages/aim/sdk/run.py", line 452, in _track_impl
raise ValueError(f'Input metric of type {type(value)} is neither python number nor AimObject')
ValueError: Input metric of type <class 'dict'> is neither python number nor AimObject


但是在 [docs](https://aimstack.readthedocs.io/en/v3.10.1/quick_start/supported_types.html) 中它说:
Aim 支持多种数据源。基本的运行参数记录涵盖了 Python 内置类型(如 `int`、`float`、`bool`、`bytes` 和 `str`),以及将这些组合成任何深度的 **字典**、列表、元组。

#### 重现问题

run.track({"somekey": "somevalue"})


#### 预期行为

记录一个 `dict`。

#### 环境

* Aim 版本 3.10.1
* Python 版本 3.8
* pip 版本 20.2.4
* OS(例如,Linux)Ubuntu 20.04.4 LTS
* 其他相关信息

#### 附加上下文

`run.py` 中的相关部分显然是这个:

if is_number(value):
val = convert_to_py_number(value)
elif isinstance(value, (CustomObject, list, tuple)):
val = value
else:
raise ValueError(f'Input metric of type {type(value)} is neither python number nor AimObject')


所以我在想:我是不是用这种方式使用错误了,实现有误,还是文档有误?
谢谢!
PS:如果能简单地跟踪 pandas 数据框就更好了。但那是另一个故事,我想。
0qx6xfy6

0qx6xfy61#

嘿,@hendriks73!
Aim确实支持dict作为类型。问题是字典目前还不支持作为序列类型,但你可以将它们记录为Run本身的属性/属性,如下所示:

run['my_dict_key'] = {"somekey": "somevalue"}
inkz8wg9

inkz8wg92#

wrt: pandas支持;我们计划改进track()方法的用户体验,以接受更多输入并提供更好的错误报告。dataframe似乎是一个相当合理的格式来支持。我可以请你打开一个单独的问题,描述你希望如何探索跟踪的数据吗?它是否应该分成多个序列(例如,每个列等)等等...

hjqgdpho

hjqgdpho3#

感谢@alberttorosyan的快速回答。
关于跟踪 Dataframe :
也许可以将它们简单地显示为可以排序、搜索和转换的表格。
将它们解释为序列是另一个选择,也许带有一些魔法“步”列。
如果您仍然认为这是一个值得单独讨论的问题,我很乐意创建一个。
(但这不可否认不是我的优先事项)

相关问题