|
|
@ -5,19 +5,17 @@ import paddle.v2.fluid.layers as layers
|
|
|
|
import paddle.v2.fluid.nets as nets
|
|
|
|
import paddle.v2.fluid.nets as nets
|
|
|
|
import paddle.v2.fluid.optimizer as optimizer
|
|
|
|
import paddle.v2.fluid.optimizer as optimizer
|
|
|
|
from paddle.v2.fluid.executor import Executor
|
|
|
|
from paddle.v2.fluid.executor import Executor
|
|
|
|
from paddle.v2.fluid.framework import g_startup_program, g_main_program
|
|
|
|
import paddle.v2.fluid.framework as framework
|
|
|
|
from paddle.v2.fluid.initializer import XavierInitializer
|
|
|
|
from paddle.v2.fluid.initializer import XavierInitializer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def resnet_cifar10(input, depth=32, main_program=None, startup_program=None):
|
|
|
|
def resnet_cifar10(input, depth=32):
|
|
|
|
def conv_bn_layer(input,
|
|
|
|
def conv_bn_layer(input,
|
|
|
|
ch_out,
|
|
|
|
ch_out,
|
|
|
|
filter_size,
|
|
|
|
filter_size,
|
|
|
|
stride,
|
|
|
|
stride,
|
|
|
|
padding,
|
|
|
|
padding,
|
|
|
|
act='relu',
|
|
|
|
act='relu'):
|
|
|
|
main_program=None,
|
|
|
|
|
|
|
|
startup_program=None):
|
|
|
|
|
|
|
|
tmp = layers.conv2d(
|
|
|
|
tmp = layers.conv2d(
|
|
|
|
input=input,
|
|
|
|
input=input,
|
|
|
|
filter_size=filter_size,
|
|
|
|
filter_size=filter_size,
|
|
|
@ -25,14 +23,10 @@ def resnet_cifar10(input, depth=32, main_program=None, startup_program=None):
|
|
|
|
stride=stride,
|
|
|
|
stride=stride,
|
|
|
|
padding=padding,
|
|
|
|
padding=padding,
|
|
|
|
act=None,
|
|
|
|
act=None,
|
|
|
|
bias_attr=False,
|
|
|
|
bias_attr=False)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
return layers.batch_norm(
|
|
|
|
return layers.batch_norm(
|
|
|
|
input=tmp,
|
|
|
|
input=tmp,
|
|
|
|
act=act,
|
|
|
|
act=act)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def shortcut(input, ch_in, ch_out, stride, program, init_program):
|
|
|
|
def shortcut(input, ch_in, ch_out, stride, program, init_program):
|
|
|
|
if ch_in != ch_out:
|
|
|
|
if ch_in != ch_out:
|
|
|
@ -44,40 +38,30 @@ def resnet_cifar10(input, depth=32, main_program=None, startup_program=None):
|
|
|
|
def basicblock(input,
|
|
|
|
def basicblock(input,
|
|
|
|
ch_in,
|
|
|
|
ch_in,
|
|
|
|
ch_out,
|
|
|
|
ch_out,
|
|
|
|
stride,
|
|
|
|
stride):
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program):
|
|
|
|
|
|
|
|
tmp = conv_bn_layer(
|
|
|
|
tmp = conv_bn_layer(
|
|
|
|
input,
|
|
|
|
input,
|
|
|
|
ch_out,
|
|
|
|
ch_out,
|
|
|
|
3,
|
|
|
|
3,
|
|
|
|
stride,
|
|
|
|
stride,
|
|
|
|
1,
|
|
|
|
1)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
tmp = conv_bn_layer(
|
|
|
|
tmp = conv_bn_layer(
|
|
|
|
tmp,
|
|
|
|
tmp,
|
|
|
|
ch_out,
|
|
|
|
ch_out,
|
|
|
|
3,
|
|
|
|
3,
|
|
|
|
1,
|
|
|
|
1,
|
|
|
|
1,
|
|
|
|
1,
|
|
|
|
act=None,
|
|
|
|
act=None)
|
|
|
|
main_program=main_program,
|
|
|
|
short = shortcut(input, ch_in, ch_out, stride)
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
short = shortcut(input, ch_in, ch_out, stride, main_program,
|
|
|
|
|
|
|
|
startup_program)
|
|
|
|
|
|
|
|
return layers.elementwise_add(
|
|
|
|
return layers.elementwise_add(
|
|
|
|
x=tmp,
|
|
|
|
x=tmp,
|
|
|
|
y=short,
|
|
|
|
y=short,
|
|
|
|
act='relu',
|
|
|
|
act='relu')
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def layer_warp(block_func, input, ch_in, ch_out, count, stride, program,
|
|
|
|
def layer_warp(block_func, input, ch_in, ch_out, count, stride):
|
|
|
|
startup_program):
|
|
|
|
tmp = block_func(input, ch_in, ch_out, stride)
|
|
|
|
tmp = block_func(input, ch_in, ch_out, stride, program, startup_program)
|
|
|
|
|
|
|
|
for i in range(1, count):
|
|
|
|
for i in range(1, count):
|
|
|
|
tmp = block_func(tmp, ch_out, ch_out, 1, program, startup_program)
|
|
|
|
tmp = block_func(tmp, ch_out, ch_out, 1)
|
|
|
|
return tmp
|
|
|
|
return tmp
|
|
|
|
|
|
|
|
|
|
|
|
assert (depth - 2) % 6 == 0
|
|
|
|
assert (depth - 2) % 6 == 0
|
|
|
@ -87,53 +71,41 @@ def resnet_cifar10(input, depth=32, main_program=None, startup_program=None):
|
|
|
|
ch_out=16,
|
|
|
|
ch_out=16,
|
|
|
|
filter_size=3,
|
|
|
|
filter_size=3,
|
|
|
|
stride=1,
|
|
|
|
stride=1,
|
|
|
|
padding=1,
|
|
|
|
padding=1)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
res1 = layer_warp(
|
|
|
|
res1 = layer_warp(
|
|
|
|
basicblock,
|
|
|
|
basicblock,
|
|
|
|
conv1,
|
|
|
|
conv1,
|
|
|
|
16,
|
|
|
|
16,
|
|
|
|
16,
|
|
|
|
16,
|
|
|
|
n,
|
|
|
|
n,
|
|
|
|
1,
|
|
|
|
1)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
res2 = layer_warp(
|
|
|
|
res2 = layer_warp(
|
|
|
|
basicblock,
|
|
|
|
basicblock,
|
|
|
|
res1,
|
|
|
|
res1,
|
|
|
|
16,
|
|
|
|
16,
|
|
|
|
32,
|
|
|
|
32,
|
|
|
|
n,
|
|
|
|
n,
|
|
|
|
2,
|
|
|
|
2)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
res3 = layer_warp(
|
|
|
|
res3 = layer_warp(
|
|
|
|
basicblock,
|
|
|
|
basicblock,
|
|
|
|
res2,
|
|
|
|
res2,
|
|
|
|
32,
|
|
|
|
32,
|
|
|
|
64,
|
|
|
|
64,
|
|
|
|
n,
|
|
|
|
n,
|
|
|
|
2,
|
|
|
|
2)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
pool = layers.pool2d(
|
|
|
|
pool = layers.pool2d(
|
|
|
|
input=res3,
|
|
|
|
input=res3,
|
|
|
|
pool_size=8,
|
|
|
|
pool_size=8,
|
|
|
|
pool_type='avg',
|
|
|
|
pool_type='avg',
|
|
|
|
pool_stride=1,
|
|
|
|
pool_stride=1)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
return pool
|
|
|
|
return pool
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def vgg16_bn_drop(input, main_program=None, startup_program=None):
|
|
|
|
def vgg16_bn_drop(input):
|
|
|
|
def conv_block(input,
|
|
|
|
def conv_block(input,
|
|
|
|
num_filter,
|
|
|
|
num_filter,
|
|
|
|
groups,
|
|
|
|
groups,
|
|
|
|
dropouts,
|
|
|
|
dropouts):
|
|
|
|
main_program=None,
|
|
|
|
|
|
|
|
startup_program=None):
|
|
|
|
|
|
|
|
return nets.img_conv_group(
|
|
|
|
return nets.img_conv_group(
|
|
|
|
input=input,
|
|
|
|
input=input,
|
|
|
|
pool_size=2,
|
|
|
|
pool_size=2,
|
|
|
@ -143,51 +115,34 @@ def vgg16_bn_drop(input, main_program=None, startup_program=None):
|
|
|
|
conv_act='relu',
|
|
|
|
conv_act='relu',
|
|
|
|
conv_with_batchnorm=True,
|
|
|
|
conv_with_batchnorm=True,
|
|
|
|
conv_batchnorm_drop_rate=dropouts,
|
|
|
|
conv_batchnorm_drop_rate=dropouts,
|
|
|
|
pool_type='max',
|
|
|
|
pool_type='max')
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conv1 = conv_block(input, 64, 2, [0.3, 0], main_program, startup_program)
|
|
|
|
conv1 = conv_block(input, 64, 2, [0.3, 0])
|
|
|
|
conv2 = conv_block(conv1, 128, 2, [0.4, 0], main_program, startup_program)
|
|
|
|
conv2 = conv_block(conv1, 128, 2, [0.4, 0])
|
|
|
|
conv3 = conv_block(conv2, 256, 3, [0.4, 0.4, 0], main_program,
|
|
|
|
conv3 = conv_block(conv2, 256, 3, [0.4, 0.4, 0])
|
|
|
|
startup_program)
|
|
|
|
conv4 = conv_block(conv3, 512, 3, [0.4, 0.4, 0])
|
|
|
|
conv4 = conv_block(conv3, 512, 3, [0.4, 0.4, 0], main_program,
|
|
|
|
conv5 = conv_block(conv4, 512, 3, [0.4, 0.4, 0])
|
|
|
|
startup_program)
|
|
|
|
|
|
|
|
conv5 = conv_block(conv4, 512, 3, [0.4, 0.4, 0], main_program,
|
|
|
|
|
|
|
|
startup_program)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
drop = layers.dropout(
|
|
|
|
drop = layers.dropout(
|
|
|
|
x=conv5,
|
|
|
|
x=conv5,
|
|
|
|
dropout_prob=0.5,
|
|
|
|
dropout_prob=0.5)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
fc1 = layers.fc(input=drop,
|
|
|
|
fc1 = layers.fc(input=drop,
|
|
|
|
size=512,
|
|
|
|
size=512,
|
|
|
|
act=None,
|
|
|
|
act=None,
|
|
|
|
param_attr={"initializer": XavierInitializer()},
|
|
|
|
param_attr={"initializer": XavierInitializer()})
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
reshape1 = layers.reshape(
|
|
|
|
reshape1 = layers.reshape(
|
|
|
|
x=fc1,
|
|
|
|
x=fc1,
|
|
|
|
shape=list(fc1.shape + (1, 1)),
|
|
|
|
shape=list(fc1.shape + (1, 1)))
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
bn = layers.batch_norm(
|
|
|
|
bn = layers.batch_norm(
|
|
|
|
input=reshape1,
|
|
|
|
input=reshape1,
|
|
|
|
act='relu',
|
|
|
|
act='relu')
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
drop2 = layers.dropout(
|
|
|
|
drop2 = layers.dropout(
|
|
|
|
x=bn,
|
|
|
|
x=bn,
|
|
|
|
dropout_prob=0.5,
|
|
|
|
dropout_prob=0.5)
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
fc2 = layers.fc(input=drop2,
|
|
|
|
fc2 = layers.fc(input=drop2,
|
|
|
|
size=512,
|
|
|
|
size=512,
|
|
|
|
act=None,
|
|
|
|
act=None,
|
|
|
|
param_attr={"initializer": XavierInitializer()},
|
|
|
|
param_attr={"initializer": XavierInitializer()})
|
|
|
|
main_program=main_program,
|
|
|
|
|
|
|
|
startup_program=startup_program)
|
|
|
|
|
|
|
|
return fc2
|
|
|
|
return fc2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -225,7 +180,7 @@ train_reader = paddle.batch(
|
|
|
|
place = core.CPUPlace()
|
|
|
|
place = core.CPUPlace()
|
|
|
|
exe = Executor(place)
|
|
|
|
exe = Executor(place)
|
|
|
|
|
|
|
|
|
|
|
|
exe.run(g_startup_program)
|
|
|
|
exe.run(framework.default_startup_program())
|
|
|
|
|
|
|
|
|
|
|
|
for pass_id in range(PASS_NUM):
|
|
|
|
for pass_id in range(PASS_NUM):
|
|
|
|
batch_id = 0
|
|
|
|
batch_id = 0
|
|
|
@ -243,7 +198,7 @@ for pass_id in range(PASS_NUM):
|
|
|
|
tensor_img.set(img_data, place)
|
|
|
|
tensor_img.set(img_data, place)
|
|
|
|
tensor_y.set(y_data, place)
|
|
|
|
tensor_y.set(y_data, place)
|
|
|
|
|
|
|
|
|
|
|
|
outs = exe.run(g_main_program,
|
|
|
|
outs = exe.run(framework.default_main_program(),
|
|
|
|
feed={"pixel": tensor_img,
|
|
|
|
feed={"pixel": tensor_img,
|
|
|
|
"label": tensor_y},
|
|
|
|
"label": tensor_y},
|
|
|
|
fetch_list=[avg_cost, accuracy])
|
|
|
|
fetch_list=[avg_cost, accuracy])
|
|
|
|