Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
VisualDL
提交
1d65b86d
V
VisualDL
项目概览
PaddlePaddle
/
VisualDL
1 年多 前同步成功
通知
88
Star
4655
Fork
642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
5
Wiki
分析
仓库
DevOps
项目成员
Pages
V
VisualDL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
5
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
1d65b86d
编写于
12月 17, 2020
作者:
走神的阿圆
提交者:
GitHub
12月 17, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add backend api for hidi (#868)
* add backend code for hidi v2
上级
53a31e3b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
72 addition
and
1 deletion
+72
-1
visualdl/server/api.py
visualdl/server/api.py
+17
-0
visualdl/server/data_manager.py
visualdl/server/data_manager.py
+1
-1
visualdl/server/lib.py
visualdl/server/lib.py
+54
-0
未找到文件。
visualdl/server/api.py
浏览文件 @
1d65b86d
...
...
@@ -146,6 +146,20 @@ class Api(object):
key
=
os
.
path
.
join
(
'data/plugin/embeddings/embeddings'
,
run
,
str
(
dimension
),
reduction
)
return
self
.
_get_with_retry
(
key
,
lib
.
get_embeddings
,
run
,
tag
,
reduction
,
dimension
)
@
result
()
def
embedding_list
(
self
):
return
self
.
_get_with_retry
(
'data/plugin/embeddings/list'
,
lib
.
get_embeddings_list
)
@
result
(
'text/tab-separated-values'
)
def
embedding_metadata
(
self
,
name
):
key
=
os
.
path
.
join
(
'data/plugin/embeddings/metadata'
,
name
)
return
self
.
_get_with_retry
(
key
,
lib
.
get_embedding_labels
,
name
)
@
result
(
'application/octet-stream'
)
def
embedding_tensor
(
self
,
name
):
key
=
os
.
path
.
join
(
'data/plugin/embeddings/tensor'
,
name
)
return
self
.
_get_with_retry
(
key
,
lib
.
get_embedding_tensors
,
name
)
@
result
()
def
histogram_tags
(
self
):
return
self
.
_get_with_retry
(
'data/plugin/histogram/tags'
,
lib
.
get_histogram_tags
)
...
...
@@ -190,6 +204,9 @@ def create_api_call(logdir, model, cache_timeout):
'audio/list'
:
(
api
.
audio_list
,
[
'run'
,
'tag'
]),
'audio/audio'
:
(
api
.
audio_audio
,
[
'run'
,
'tag'
,
'index'
]),
'embedding/embedding'
:
(
api
.
embedding_embedding
,
[
'run'
,
'tag'
,
'reduction'
,
'dimension'
]),
'embedding/list'
:
(
api
.
embedding_list
,
[]),
'embedding/tensor'
:
(
api
.
embedding_tensor
,
[
'name'
]),
'embedding/metadata'
:
(
api
.
embedding_metadata
,
[
'name'
]),
'histogram/list'
:
(
api
.
histogram_list
,
[
'run'
,
'tag'
]),
'graph/graph'
:
(
api
.
graph_graph
,
[]),
'pr-curve/list'
:
(
api
.
pr_curves_pr_curve
,
[
'run'
,
'tag'
]),
...
...
visualdl/server/data_manager.py
浏览文件 @
1d65b86d
...
...
@@ -21,7 +21,7 @@ DEFAULT_PLUGIN_MAXSIZE = {
"scalar"
:
1000
,
"image"
:
10
,
"histogram"
:
100
,
"embeddings"
:
50000
,
"embeddings"
:
50000
000
,
"audio"
:
10
,
"pr_curve"
:
300
,
"meta_data"
:
100
...
...
visualdl/server/lib.py
浏览文件 @
1d65b86d
...
...
@@ -17,6 +17,8 @@ from __future__ import absolute_import
import
sys
import
time
import
os
import
io
import
csv
from
functools
import
partial
import
numpy
as
np
from
visualdl.server.log
import
logger
...
...
@@ -27,6 +29,8 @@ from visualdl.component import components
MODIFY_PREFIX
=
{}
MODIFIED_RUNS
=
[]
EMBEDDING_NAME
=
{}
embedding_names
=
[]
def
s2ms
(
timestamp
):
...
...
@@ -196,6 +200,56 @@ def get_pr_curve_step(log_reader, run, tag=None):
return
results
def
get_embeddings_list
(
log_reader
):
run2tag
=
get_logs
(
log_reader
,
'embeddings'
)
for
run
,
_tags
in
zip
(
run2tag
[
'runs'
],
run2tag
[
'tags'
]):
for
tag
in
_tags
:
name
=
path
=
os
.
path
.
join
(
run
,
tag
)
if
name
in
EMBEDDING_NAME
:
return
embedding_names
EMBEDDING_NAME
.
update
({
name
:
{
'run'
:
run
,
'tag'
:
tag
}})
records
=
log_reader
.
data_manager
.
get_reservoir
(
"embeddings"
).
get_items
(
run
,
decode_tag
(
tag
))
row_len
=
len
(
records
[
0
].
embeddings
.
embeddings
)
col_len
=
len
(
records
[
0
].
embeddings
.
embeddings
[
0
].
vectors
)
shape
=
[
row_len
,
col_len
]
embedding_names
.
append
({
'name'
:
name
,
'shape'
:
shape
,
'path'
:
path
})
return
embedding_names
def
get_embedding_labels
(
log_reader
,
name
):
run
=
EMBEDDING_NAME
[
name
][
'run'
]
tag
=
EMBEDDING_NAME
[
name
][
'tag'
]
log_reader
.
load_new_data
()
records
=
log_reader
.
data_manager
.
get_reservoir
(
"embeddings"
).
get_items
(
run
,
decode_tag
(
tag
))
labels
=
[]
for
item
in
records
[
0
].
embeddings
.
embeddings
:
labels
.
append
([
item
.
label
])
with
io
.
StringIO
()
as
fp
:
csv_writer
=
csv
.
writer
(
fp
,
delimiter
=
'
\t
'
)
csv_writer
.
writerows
(
labels
)
labels
=
fp
.
getvalue
()
# labels = "\n".join(str(i) for i in labels)
return
labels
def
get_embedding_tensors
(
log_reader
,
name
):
run
=
EMBEDDING_NAME
[
name
][
'run'
]
tag
=
EMBEDDING_NAME
[
name
][
'tag'
]
log_reader
.
load_new_data
()
records
=
log_reader
.
data_manager
.
get_reservoir
(
"embeddings"
).
get_items
(
run
,
decode_tag
(
tag
))
vectors
=
[]
for
item
in
records
[
0
].
embeddings
.
embeddings
:
vectors
.
append
(
item
.
vectors
)
vectors
=
np
.
array
(
vectors
).
flatten
().
astype
(
np
.
float32
).
tobytes
()
return
vectors
def
get_embeddings
(
log_reader
,
run
,
tag
,
reduction
,
dimension
=
2
):
run
=
log_reader
.
name2tags
[
run
]
if
run
in
log_reader
.
name2tags
else
run
log_reader
.
load_new_data
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录