Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
9ba231d3
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9ba231d3
编写于
3月 01, 2017
作者:
Y
Yu Yang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Complete inferencer.
上级
4c24ac1a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
61 addition
and
28 deletion
+61
-28
demo/mnist/api_train_v2.py
demo/mnist/api_train_v2.py
+13
-0
python/paddle/v2/dataset/mnist.py
python/paddle/v2/dataset/mnist.py
+15
-14
python/paddle/v2/inferencer.py
python/paddle/v2/inferencer.py
+16
-11
python/paddle/v2/reader/decorator.py
python/paddle/v2/reader/decorator.py
+17
-3
未找到文件。
demo/mnist/api_train_v2.py
浏览文件 @
9ba231d3
...
...
@@ -44,6 +44,19 @@ def main():
batch_size
=
32
),
event_handler
=
event_handler
)
# output is a softmax layer. It returns probabilities.
# Shape should be (100, 10)
probs
=
paddle
.
infer
(
output
=
inference
,
parameters
=
parameters
,
reader
=
paddle
.
reader
.
batched
(
paddle
.
reader
.
limited
(
paddle
.
reader
.
map_readers
(
lambda
item
:
(
item
[
0
],
),
paddle
.
dataset
.
mnist
.
test
()),
limit
=
100
),
batch_size
=
32
))
print
probs
.
shape
if
__name__
==
'__main__'
:
main
()
python/paddle/v2/dataset/mnist.py
浏览文件 @
9ba231d3
...
...
@@ -35,24 +35,25 @@ def reader_creator(image_filename, label_filename, buffer_size):
l
=
subprocess
.
Popen
([
zcat_cmd
,
label_filename
],
stdout
=
subprocess
.
PIPE
)
l
.
stdout
.
read
(
8
)
# skip some magic bytes
while
True
:
labels
=
numpy
.
fromfile
(
l
.
stdout
,
'ubyte'
,
count
=
buffer_size
).
astype
(
"int"
)
try
:
# reader could be break.
while
True
:
labels
=
numpy
.
fromfile
(
l
.
stdout
,
'ubyte'
,
count
=
buffer_size
).
astype
(
"int"
)
if
labels
.
size
!=
buffer_size
:
break
# numpy.fromfile returns empty slice after EOF.
if
labels
.
size
!=
buffer_size
:
break
# numpy.fromfile returns empty slice after EOF.
images
=
numpy
.
fromfile
(
m
.
stdout
,
'ubyte'
,
count
=
buffer_size
*
28
*
28
).
reshape
(
(
buffer_size
,
28
*
28
)).
astype
(
'float32'
)
images
=
numpy
.
fromfile
(
m
.
stdout
,
'ubyte'
,
count
=
buffer_size
*
28
*
28
).
reshape
(
(
buffer_size
,
28
*
28
)).
astype
(
'float32'
)
images
=
images
/
255.0
*
2.0
-
1.0
images
=
images
/
255.0
*
2.0
-
1.0
for
i
in
xrange
(
buffer_size
):
yield
images
[
i
,
:],
int
(
labels
[
i
])
m
.
terminate
()
l
.
terminate
()
for
i
in
xrange
(
buffer_size
):
yield
images
[
i
,
:],
int
(
labels
[
i
])
finally
:
m
.
terminate
()
l
.
terminate
()
return
reader
...
...
python/paddle/v2/inferencer.py
浏览文件 @
9ba231d3
...
...
@@ -16,18 +16,18 @@ class InferenceEngine(object):
for
param
in
gm
.
getParameters
():
val
=
param
.
getBuf
(
api
.
PARAMETER_VALUE
)
name
=
param
.
getName
()
assert
isinstance
(
val
,
api
.
Matrix
)
val
.
copyFromNumpy
Mat
(
parameters
.
get
(
name
))
assert
isinstance
(
val
,
api
.
Vector
)
val
.
copyFromNumpy
Array
(
parameters
.
get
(
name
).
flatten
(
))
self
.
__gradient_machine__
=
gm
self
.
__data_types__
=
topo
.
data_type
()
def
iter_infer
(
self
,
reader
,
reader_dict
=
None
):
if
reader_dict
is
None
:
reader_dict
=
self
.
default_reader_dict
()
feeder
=
DataFeeder
(
self
.
__data_types__
,
reader_dict
)
out_args
=
api
.
Arguments
.
createArguments
(
0
)
self
.
__gradient_machine__
.
start
()
for
data_batch
in
reader
():
yield
self
.
__gradient_machine__
.
forwardTest
(
feeder
(
data_batch
),
out_args
,
api
.
PASS_TEST
)
yield
self
.
__gradient_machine__
.
forwardTest
(
feeder
(
data_batch
))
self
.
__gradient_machine__
.
finish
()
def
iter_infer_field
(
self
,
field
,
**
kwargs
):
...
...
@@ -35,12 +35,17 @@ class InferenceEngine(object):
yield
[
each_result
[
field
]
for
each_result
in
result
]
def
infer
(
self
,
field
=
'value'
,
**
kwargs
):
retv
=
[]
for
result
in
itertools
.
izip
(
self
.
iter_infer_field
(
field
=
field
,
**
kwargs
)):
retv
.
append
(
numpy
.
concatenate
(
result
))
return
retv
retv
=
None
for
result
in
self
.
iter_infer_field
(
field
=
field
,
**
kwargs
):
if
retv
is
None
:
retv
=
[[]]
*
len
(
result
)
for
i
,
item
in
enumerate
(
result
):
retv
[
i
].
append
(
item
)
retv
=
[
numpy
.
concatenate
(
out
)
for
out
in
retv
]
if
len
(
retv
)
==
1
:
return
retv
[
0
]
else
:
return
retv
def
default_reader_dict
(
self
):
reader_dict
=
dict
()
...
...
python/paddle/v2/reader/decorator.py
浏览文件 @
9ba231d3
...
...
@@ -14,13 +14,13 @@
__all__
=
[
'map_readers'
,
'buffered'
,
'compose'
,
'chain'
,
'shuffle'
,
'ComposeNotAligned'
,
'batched'
'ComposeNotAligned'
,
'batched'
,
'limited'
]
from
Queue
import
Queue
from
threading
import
Thread
import
itertools
import
random
from
Queue
import
Queue
from
threading
import
Thread
def
map_readers
(
func
,
*
readers
):
...
...
@@ -213,3 +213,17 @@ def batched(reader, batch_size):
yield
batch
return
batched_reader
def
limited
(
reader
,
limit
):
"""
Limit the max number of samples that reader could return.
"""
def
limited_reader
():
for
i
,
item
in
enumerate
(
reader
()):
if
i
==
limit
:
break
yield
item
return
limited_reader
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录