Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
08ca7267
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
08ca7267
编写于
11月 02, 2017
作者:
武
武毅
提交者:
dzhwinter
11月 01, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
evaluator_accumulate (#4828)
上级
1f11f773
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
122 addition
and
0 deletion
+122
-0
python/paddle/v2/framework/evaluator.py
python/paddle/v2/framework/evaluator.py
+59
-0
python/paddle/v2/framework/tests/test_evaluator.py
python/paddle/v2/framework/tests/test_evaluator.py
+63
-0
未找到文件。
python/paddle/v2/framework/evaluator.py
0 → 100644
浏览文件 @
08ca7267
import
paddle.v2.framework.op
as
op
import
numpy
as
np
import
paddle.v2.framework.core
as
core
def
avg_accumulate
(
accumulated_var
,
per_eval
,
num_batches
,
place
):
t
=
np
.
array
(
accumulated_var
.
get_tensor
())
t
[
0
]
+=
per_eval
[
0
]
accumulated_var
.
get_tensor
().
set
([
t
[
0
]
/
float
(
num_batches
)],
place
)
class
Evaluator
(
object
):
def
__init__
(
self
,
scope
,
operator
=
'accuracy'
,
input
=
'Inference'
,
label
=
'Label'
,
output
=
'Output'
,
place
=
core
.
CPUPlace
()):
"""
create an evaluator for evaluating the inference.
NOTE: default run on CPUPlace(), running on GPUPlace doesn't improve performance much.
:param scope: the scope instance contains the input.
:type scope: paddle.v2.framework.core.scope
:param operator: operator name for caculating the evaluation for each mini-batch.
:type operator: string
:param input: output variable name of forward network.
:type input: string
:param label: variable name of label
:type label: string
"""
self
.
scope
=
scope
self
.
place
=
place
self
.
output_name
=
output
self
.
num_batches
=
0
# create variable to store accumulated evaluator output
eval_name
=
''
.
join
([
operator
,
"@Eval"
])
if
scope
.
find_var
(
eval_name
):
raise
Exception
(
"evaluator already exist in scope: %s"
%
eval_name
)
self
.
accumulated_var
=
scope
.
var
(
eval_name
)
t
=
self
.
accumulated_var
.
get_tensor
()
t
.
set_dims
((
1
,
))
t
.
set
([
0.0
],
place
)
# self.accumulated_var = block.create_var(block, name=eval_name, shape=(1,))
# self.accumulated_var.get_tensor().set([0.0])
# create operator of evaluation
var_map
=
dict
()
# var name -> variable
var_map
[
input
]
=
[
input
]
var_map
[
label
]
=
[
label
]
var_map
[
output
]
=
[
output
]
self
.
op
=
op
.
Operator
(
operator
,
**
var_map
)
def
evaluate
(
self
,
ctx
,
accumulator
=
avg_accumulate
):
self
.
op
.
run
(
self
.
scope
,
ctx
)
per_eval
=
np
.
array
(
self
.
scope
.
find_var
(
self
.
output_name
).
get_tensor
())
self
.
num_batches
+=
1
accumulator
(
self
.
accumulated_var
,
per_eval
,
self
.
num_batches
,
self
.
place
)
python/paddle/v2/framework/tests/test_evaluator.py
0 → 100644
浏览文件 @
08ca7267
from
paddle.v2.framework.evaluator
import
Evaluator
from
paddle.v2.framework.op
import
Operator
import
paddle.v2.framework.core
as
core
import
unittest
import
op_test
import
numpy
as
np
class
TestEvaluator
(
unittest
.
TestCase
):
def
setup
(
self
,
scope
,
inputs
,
outputs
):
def
__create_var__
(
var_name
,
arr
):
np_arr
=
np
.
array
(
arr
)
scope
.
var
(
var_name
)
# tensor = var.get_tensor()
# tensor.set_dims(np_arr.shape)
for
var_name
,
arr
in
inputs
.
iteritems
():
__create_var__
(
var_name
,
arr
)
for
var_name
,
arr
in
outputs
.
iteritems
():
__create_var__
(
var_name
,
arr
)
def
test_evaluator
(
self
):
inputs
=
{
'Inference'
:
np
.
array
([[
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
1
]]).
T
,
'Label'
:
np
.
array
([
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
])
}
outputs
=
{
'Accuracy'
:
np
.
array
([
0.9
])}
out_name
=
'Accuracy'
places
=
[
core
.
CPUPlace
()]
if
core
.
is_compile_gpu
():
places
.
append
(
core
.
GPUPlace
(
0
))
for
place
in
places
:
scope
=
core
.
Scope
()
self
.
setup
(
scope
,
inputs
,
outputs
)
evaluator
=
Evaluator
(
scope
,
operator
=
'accuracy'
,
input
=
'Inference'
,
label
=
'Label'
,
output
=
out_name
,
place
=
place
)
op_test
.
set_input
(
scope
,
evaluator
.
op
,
inputs
,
place
)
ctx
=
core
.
DeviceContext
.
create
(
place
)
for
i
in
range
(
10
):
# simulate 10 mini-batches
evaluator
.
evaluate
(
ctx
)
actual
=
np
.
array
(
scope
.
find_var
(
out_name
).
get_tensor
())
print
actual
self
.
assertTrue
(
np
.
allclose
(
actual
,
outputs
[
out_name
],
atol
=
1e-5
),
"output name: "
+
out_name
+
" has diff."
)
if
__name__
==
'__main__'
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录