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