Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
2c189dca
P
Paddle
项目概览
PaddlePaddle
/
Paddle
1 年多 前同步成功
通知
2302
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
2c189dca
编写于
2月 01, 2018
作者:
Y
Yu Yang
提交者:
GitHub
2月 01, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7998 from reyoung/feature/make_image_classification_normal_unittest
Make image_classification as a normal python unittest
上级
3f616152
1b1f305b
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
89 addition
and
58 deletion
+89
-58
python/paddle/v2/fluid/tests/book/CMakeLists.txt
python/paddle/v2/fluid/tests/book/CMakeLists.txt
+1
-3
python/paddle/v2/fluid/tests/book/test_image_classification_train.py
...le/v2/fluid/tests/book/test_image_classification_train.py
+88
-55
未找到文件。
python/paddle/v2/fluid/tests/book/CMakeLists.txt
浏览文件 @
2c189dca
file
(
GLOB TEST_OPS RELATIVE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
"test_*.py"
)
string
(
REPLACE
".py"
""
TEST_OPS
"
${
TEST_OPS
}
"
)
list
(
REMOVE_ITEM TEST_OPS test_image_classification_train test_recognize_digits
)
py_test
(
test_image_classification_train_resnet SRCS test_image_classification_train.py ARGS resnet
)
py_test
(
test_image_classification_train_vgg SRCS test_image_classification_train.py ARGS vgg
)
list
(
REMOVE_ITEM TEST_OPS test_recognize_digits
)
py_test
(
test_recognize_digits_mlp_cpu
SRCS test_recognize_digits.py
ARGS mlp
)
...
...
python/paddle/v2/fluid/tests/book/test_image_classification_train.py
浏览文件 @
2c189dca
...
...
@@ -14,10 +14,10 @@
from
__future__
import
print_function
import
sys
import
paddle.v2
as
paddle
import
paddle.v2.fluid
as
fluid
import
unittest
import
contextlib
def
resnet_cifar10
(
input
,
depth
=
32
):
...
...
@@ -89,48 +89,49 @@ def vgg16_bn_drop(input):
return
fc2
classdim
=
10
data_shape
=
[
3
,
32
,
32
]
def
main
(
net_type
,
use_cuda
):
if
use_cuda
and
not
fluid
.
core
.
is_compiled_with_cuda
():
return
images
=
fluid
.
layers
.
data
(
name
=
'pixel'
,
shape
=
data_shape
,
dtype
=
'float32'
)
label
=
fluid
.
layers
.
data
(
name
=
'label'
,
shape
=
[
1
],
dtype
=
'int64'
)
classdim
=
10
data_shape
=
[
3
,
32
,
32
]
net_type
=
"vgg"
if
len
(
sys
.
argv
)
>=
2
:
net_type
=
sys
.
argv
[
1
]
images
=
fluid
.
layers
.
data
(
name
=
'pixel'
,
shape
=
data_shape
,
dtype
=
'float32'
)
label
=
fluid
.
layers
.
data
(
name
=
'label'
,
shape
=
[
1
],
dtype
=
'int64'
)
if
net_type
==
"vgg"
:
if
net_type
==
"vgg"
:
print
(
"train vgg net"
)
net
=
vgg16_bn_drop
(
images
)
elif
net_type
==
"resnet"
:
elif
net_type
==
"resnet"
:
print
(
"train resnet"
)
net
=
resnet_cifar10
(
images
,
32
)
else
:
else
:
raise
ValueError
(
"%s network is not supported"
%
net_type
)
predict
=
fluid
.
layers
.
fc
(
input
=
net
,
size
=
classdim
,
act
=
'softmax'
)
cost
=
fluid
.
layers
.
cross_entropy
(
input
=
predict
,
label
=
label
)
avg_cost
=
fluid
.
layers
.
mean
(
x
=
cost
)
predict
=
fluid
.
layers
.
fc
(
input
=
net
,
size
=
classdim
,
act
=
'softmax'
)
cost
=
fluid
.
layers
.
cross_entropy
(
input
=
predict
,
label
=
label
)
avg_cost
=
fluid
.
layers
.
mean
(
x
=
cost
)
optimizer
=
fluid
.
optimizer
.
Adam
(
learning_rate
=
0.001
)
opts
=
optimizer
.
minimize
(
avg_cost
)
optimizer
=
fluid
.
optimizer
.
Adam
(
learning_rate
=
0.001
)
optimizer
.
minimize
(
avg_cost
)
accuracy
=
fluid
.
evaluator
.
Accuracy
(
input
=
predict
,
label
=
label
)
accuracy
=
fluid
.
evaluator
.
Accuracy
(
input
=
predict
,
label
=
label
)
BATCH_SIZE
=
128
PASS_NUM
=
1
BATCH_SIZE
=
128
PASS_NUM
=
1
train_reader
=
paddle
.
batch
(
train_reader
=
paddle
.
batch
(
paddle
.
reader
.
shuffle
(
paddle
.
dataset
.
cifar
.
train10
(),
buf_size
=
128
*
10
),
batch_size
=
BATCH_SIZE
)
place
=
fluid
.
CPUPlace
()
exe
=
fluid
.
Executor
(
place
)
feeder
=
fluid
.
DataFeeder
(
place
=
place
,
feed_list
=
[
images
,
label
])
exe
.
run
(
fluid
.
default_startup_program
())
place
=
fluid
.
CUDAPlace
(
0
)
if
use_cuda
else
fluid
.
CPUPlace
()
exe
=
fluid
.
Executor
(
place
)
feeder
=
fluid
.
DataFeeder
(
place
=
place
,
feed_list
=
[
images
,
label
])
exe
.
run
(
fluid
.
default_startup_program
())
for
pass_id
in
range
(
PASS_NUM
):
loss
=
0.0
for
pass_id
in
range
(
PASS_NUM
):
accuracy
.
reset
(
exe
)
for
data
in
train_reader
():
loss
,
acc
=
exe
.
run
(
fluid
.
default_main_program
(),
...
...
@@ -139,6 +140,38 @@ for pass_id in range(PASS_NUM):
pass_acc
=
accuracy
.
eval
(
exe
)
print
(
"loss:"
+
str
(
loss
)
+
" acc:"
+
str
(
acc
)
+
" pass_acc:"
+
str
(
pass_acc
))
# this model is slow, so if we can train two mini batch, we think it works properly.
exit
(
0
)
exit
(
1
)
return
raise
AssertionError
(
"Image classification loss is too large, {0:2.2}"
.
format
(
loss
))
class
TestImageClassification
(
unittest
.
TestCase
):
def
test_vgg_cuda
(
self
):
with
self
.
scope_prog_guard
():
main
(
'vgg'
,
use_cuda
=
True
)
def
test_resnet_cuda
(
self
):
with
self
.
scope_prog_guard
():
main
(
'resnet'
,
use_cuda
=
True
)
def
test_vgg_cpu
(
self
):
with
self
.
scope_prog_guard
():
main
(
'vgg'
,
use_cuda
=
False
)
def
test_resnet_cpu
(
self
):
with
self
.
scope_prog_guard
():
main
(
'resnet'
,
use_cuda
=
False
)
@
contextlib
.
contextmanager
def
scope_prog_guard
(
self
):
prog
=
fluid
.
Program
()
startup_prog
=
fluid
.
Program
()
scope
=
fluid
.
core
.
Scope
()
with
fluid
.
scope_guard
(
scope
):
with
fluid
.
program_guard
(
prog
,
startup_prog
):
yield
if
__name__
==
'__main__'
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录