未验证 提交 5fd20aa8 编写于 作者: 走神的阿圆's avatar 走神的阿圆 提交者: GitHub

fix docs of LogReader (#860)

上级 dd0f9947
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
## 简介 ## 简介
VisualDL可通过LogReader获取保存的日志中所有数据,帮助用户进行更详细的分析工作。 VisualDL可通过LogReader获取保存的日志中所有数据,帮助用户进行更详细的分析工作。
## 使用方式 ## LogReader主要方法说明
### 1. 获取LogReader实例 ### __init__(file_name)
#### 功能
初始化一个LogReader实例,用于读取指定日志的内容。
LogReader的初始化接口如下:
```python
class LogReader(file_name)
```
#### 接口参数 #### 接口参数
| 参数 | 格式 | 含义 | | 参数 | 格式 | 含义 |
...@@ -27,28 +27,53 @@ from visualdl import LogReader ...@@ -27,28 +27,53 @@ from visualdl import LogReader
reader = LogReader(file_name='./log/vdlrecords.1605533348.log') reader = LogReader(file_name='./log/vdlrecords.1605533348.log')
``` ```
### 2. 获取所有数据的tag信息 ### get_tags()
通过接口`tags()`可获取LogReader实例对应日志中的所有数据tag信息,如下:
#### 功能
获取日志中所有记录的组件及其包括的tag
#### 接口参数
#### 示例
```python ```python
tags = reader.tags() tags = reader.get_tags()
``` ```
结果如下,格式为`${file_name}/${tag}:${component_name}` 结果如下,格式为`{component_name1: [tag1, tag2, ... tagn], component_name2: [tag1, tag2, ... tagn]}`
```python ```python
{'vdlrecords.1605533348.log/meta_data_tag': 'meta_data', 'vdlrecords.1605533348.log/Metrics%Training(Step): loss': 'scalar', 'vdlrecords.1605533348.log/Metrics%Training(Step): acc1': 'scalar', 'vdlrecords.1605533348.log/Metrics%Training(Step): acc5': 'scalar', 'vdlrecords.1605533348.log/Metrics%Training(Step): lr': 'scalar', 'vdlrecords.1605533348.log/Metrics%Eval(Epoch): acc1': 'scalar', 'vdlrecords.1605533348.log/Metrics%Eval(Epoch): acc5': 'scalar'} # 这表示日志中有两个组件,分别是默认的`meta_data`和含有两个tag的`scalar`
{'meta_data': ['meta_data_tag'], 'scalar': ['tag/train', 'tag/test']}
``` ```
### 3. 获取某tag对应的数据 ### get_data(component, tag)
通过接口`get_data(component, tag)`可获取某组件某tag对应的所有数据,例如:
#### 功能
获取指定component(如`scalar``image`等)下某个tag的所有数据,返回值为一个列表
#### 接口参数
| 参数 | 格式 | 含义 |
| --------------- | ------- | ------------------------------------------------------------ |
| component | string | 指定要读取的组件类型,可以为`scalar``image`等|
| tag | string | 指定要读取的tag|
#### 示例
假设要获取tag为`tag/test`的数据,则代码如下:
```python ```python
# 获取scalar组件tag为`Metrics%Training(Step): loss`的数据 data = reader.get_data('scalar', 'tag/test')
data = reader.get_data('scalar', 'Metrics%Training(Step): loss')
``` ```
结果为列表形式,如下 结果为列表形式,如下
```python ```python
... ...
id: 5 id: 5
tag: "Metrics/Training(Step): loss" tag: "Metrics/Training(Step): tag%test"
timestamp: 1605533356039 timestamp: 1605533356039
value: 3.1297709941864014 value: 3.1297709941864014
... ...
``` ```
PS:为了兼容前端URL请求,此处的%是由/替换生成,不影响数据本身
...@@ -19,7 +19,7 @@ from visualdl.component import components ...@@ -19,7 +19,7 @@ from visualdl.component import components
from visualdl.reader.record_reader import RecordReader from visualdl.reader.record_reader import RecordReader
from visualdl.server.data_manager import default_data_manager from visualdl.server.data_manager import default_data_manager
from visualdl.proto import record_pb2 from visualdl.proto import record_pb2
from visualdl.utils.string_util import decode_tag from visualdl.utils.string_util import decode_tag, encode_tag
def is_VDLRecord_file(path): def is_VDLRecord_file(path):
...@@ -102,14 +102,17 @@ class LogReader(object): ...@@ -102,14 +102,17 @@ class LogReader(object):
component_keys = self._log_data.keys() component_keys = self._log_data.keys()
log_tags = {} log_tags = {}
for key in component_keys: for key in component_keys:
log_tags[key] = list(self._log_data[key].keys()) _tags = list(self._log_data[key].keys())
tags = list(map(lambda x: encode_tag(x), _tags))
log_tags[key] = tags
return log_tags return log_tags
def get_tags(self): def get_tags(self):
return self._get_log_tags() return self._get_log_tags()
def get_data(self, component, tag): def get_data(self, component, tag):
return self._log_data[component][tag] return self._log_data[component][decode_tag(tag)]
def parse_from_bin(self, record_bin): def parse_from_bin(self, record_bin):
"""Register to self._tags by component type. """Register to self._tags by component type.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册