@ -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, feed = { } , fetch_list = [ ] )
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 ] )