Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDILab开源决策智能平台
DI-engine
提交
12db1bad
D
DI-engine
项目概览
OpenDILab开源决策智能平台
/
DI-engine
上一次同步 2 年多
通知
61
Star
322
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DI-engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
12db1bad
编写于
11月 08, 2021
作者:
X
Xu Jingxin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make sure sampled data in buffer is different from each other
上级
3d698d0f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
39 addition
and
1 deletion
+39
-1
ding/worker/buffer/deque_buffer.py
ding/worker/buffer/deque_buffer.py
+17
-1
ding/worker/buffer/tests/test_buffer.py
ding/worker/buffer/tests/test_buffer.py
+22
-0
未找到文件。
ding/worker/buffer/deque_buffer.py
浏览文件 @
12db1bad
from
typing
import
Any
,
Iterable
,
List
,
Optional
,
Union
from
collections
import
deque
from
collections
import
de
faultdict
,
de
que
from
ding.worker.buffer
import
Buffer
,
apply_middleware
,
BufferedData
from
ding.worker.buffer.utils
import
fastcopy
import
itertools
import
random
import
uuid
...
...
@@ -65,6 +66,8 @@ class DequeBuffer(Buffer):
else
:
raise
ValueError
(
"There are less than {} data in buffer({})"
.
format
(
size
,
self
.
count
()))
sampled_data
=
self
.
_independence
(
sampled_data
)
return
sampled_data
@
apply_middleware
(
"update"
)
...
...
@@ -93,6 +96,19 @@ class DequeBuffer(Buffer):
def
clear
(
self
)
->
None
:
self
.
storage
.
clear
()
def
_independence
(
self
,
buffered_samples
:
List
[
BufferedData
])
->
List
[
BufferedData
]:
"""
Overview:
Make sure that each record is different from each other, but remember that this function
is different from clone_object. You may change the data in the buffer by modifying a record.
"""
occurred
=
defaultdict
(
int
)
for
i
,
buffered
in
enumerate
(
buffered_samples
):
occurred
[
buffered
.
index
]
+=
1
if
occurred
[
buffered
.
index
]
>
1
:
buffered_samples
[
i
]
=
fastcopy
.
copy
(
buffered
)
return
buffered_samples
def
__iter__
(
self
)
->
deque
:
return
iter
(
self
.
storage
)
...
...
ding/worker/buffer/tests/test_buffer.py
浏览文件 @
12db1bad
...
...
@@ -165,3 +165,25 @@ def test_ignore_insufficient():
buffer
.
sample
(
3
,
ignore_insufficient
=
False
)
data
=
buffer
.
sample
(
3
,
ignore_insufficient
=
True
)
assert
len
(
data
)
==
0
@
pytest
.
mark
.
unittest
def
test_independence
():
# By replace
buffer
=
DequeBuffer
(
size
=
1
)
data
=
{
"key"
:
"origin"
}
buffer
.
push
(
data
)
sampled_data
=
buffer
.
sample
(
2
,
replace
=
True
)
assert
len
(
sampled_data
)
==
2
sampled_data
[
0
].
data
[
"key"
]
=
"new"
assert
sampled_data
[
1
].
data
[
"key"
]
==
"origin"
# By indices
buffer
=
DequeBuffer
(
size
=
1
)
data
=
{
"key"
:
"origin"
}
buffered
=
buffer
.
push
(
data
)
indices
=
[
buffered
.
index
,
buffered
.
index
]
sampled_data
=
buffer
.
sample
(
indices
=
indices
)
assert
len
(
sampled_data
)
==
2
sampled_data
[
0
].
data
[
"key"
]
=
"new"
assert
sampled_data
[
1
].
data
[
"key"
]
==
"origin"
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录