|
|
@ -25,10 +25,10 @@ from paddle.trainer.config_parser import *
|
|
|
|
__all__ = [
|
|
|
|
__all__ = [
|
|
|
|
'sequence_conv_pool', 'simple_lstm', "simple_img_conv_pool",
|
|
|
|
'sequence_conv_pool', 'simple_lstm', "simple_img_conv_pool",
|
|
|
|
"img_conv_bn_pool", 'lstmemory_group', 'lstmemory_unit', 'small_vgg',
|
|
|
|
"img_conv_bn_pool", 'lstmemory_group', 'lstmemory_unit', 'small_vgg',
|
|
|
|
'img_conv_group', 'vgg_16_network', 'gru_unit', 'gru_group', 'simple_gru',
|
|
|
|
'img_conv_group', 'img_separable_conv', 'vgg_16_network', 'gru_unit',
|
|
|
|
'simple_attention', 'dot_product_attention', 'multi_head_attention',
|
|
|
|
'gru_group', 'simple_gru', 'simple_attention', 'dot_product_attention',
|
|
|
|
'simple_gru2', 'bidirectional_gru', 'text_conv_pool', 'bidirectional_lstm',
|
|
|
|
'multi_head_attention', 'simple_gru2', 'bidirectional_gru',
|
|
|
|
'inputs', 'outputs'
|
|
|
|
'text_conv_pool', 'bidirectional_lstm', 'inputs', 'outputs'
|
|
|
|
]
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
######################################################
|
|
|
|
######################################################
|
|
|
@ -435,6 +435,86 @@ def img_conv_group(input,
|
|
|
|
input=tmp, stride=pool_stride, pool_size=pool_size, pool_type=pool_type)
|
|
|
|
input=tmp, stride=pool_stride, pool_size=pool_size, pool_type=pool_type)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@wrap_name_default("separable_conv")
|
|
|
|
|
|
|
|
def img_separable_conv(input,
|
|
|
|
|
|
|
|
num_channels,
|
|
|
|
|
|
|
|
num_out_channels,
|
|
|
|
|
|
|
|
filter_size,
|
|
|
|
|
|
|
|
stride=1,
|
|
|
|
|
|
|
|
padding=0,
|
|
|
|
|
|
|
|
depth_multiplier=1,
|
|
|
|
|
|
|
|
act=None,
|
|
|
|
|
|
|
|
bias_attr=None,
|
|
|
|
|
|
|
|
param_attr=None,
|
|
|
|
|
|
|
|
shared_bias=True,
|
|
|
|
|
|
|
|
layer_type=None,
|
|
|
|
|
|
|
|
name=None):
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
Separable Convolution.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The separable convolution module is consisted of a depthwise convolution
|
|
|
|
|
|
|
|
that acts separately on input channels, followed by a pointwise convolution
|
|
|
|
|
|
|
|
with 1*1 kernels that mixes channels. It is used for Xception:
|
|
|
|
|
|
|
|
https://arxiv.org/pdf/1610.02357.pdf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
:param input: input layer.
|
|
|
|
|
|
|
|
:type input: LayerOutput
|
|
|
|
|
|
|
|
:param num_channels: the number of input channels.
|
|
|
|
|
|
|
|
:type num_channels: int
|
|
|
|
|
|
|
|
:param num_out_channels: the number of output channels.
|
|
|
|
|
|
|
|
:type num_out_channels: int
|
|
|
|
|
|
|
|
:param filter_size: the filter size for the depthwise convolution.
|
|
|
|
|
|
|
|
:type filter_size: int|tuple
|
|
|
|
|
|
|
|
:param stride: the stride size for the depthwise convolution.
|
|
|
|
|
|
|
|
:type stride: int|tuple
|
|
|
|
|
|
|
|
:param padding: the padding size for the depthwise convolution.
|
|
|
|
|
|
|
|
:type padding: int|tuple
|
|
|
|
|
|
|
|
:param depth_multiplier: the number of filter for one channel in the
|
|
|
|
|
|
|
|
depthwize convolution.
|
|
|
|
|
|
|
|
:type depth_multiplier: int
|
|
|
|
|
|
|
|
:param act: the activation function for the output.
|
|
|
|
|
|
|
|
:type act: BaseActivation
|
|
|
|
|
|
|
|
:param bias_attr: see img_conv_layer for details.
|
|
|
|
|
|
|
|
:type bias_attr: ParameterAttribute
|
|
|
|
|
|
|
|
:param param_attr: see img_conv_layer for details.
|
|
|
|
|
|
|
|
:type param_attr: ParameterAttribute
|
|
|
|
|
|
|
|
:param shared_bias: see img_conv_layer for details.
|
|
|
|
|
|
|
|
:type shared_bias: bool
|
|
|
|
|
|
|
|
:param layer_type: see img_conv_layer for details.
|
|
|
|
|
|
|
|
:type layer_type: bool
|
|
|
|
|
|
|
|
:return: layer's output
|
|
|
|
|
|
|
|
:rtype: LayerOutput
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
__depthwise_conv__ = img_conv_layer(
|
|
|
|
|
|
|
|
name="%s_depthwise_conv" % name,
|
|
|
|
|
|
|
|
input=input,
|
|
|
|
|
|
|
|
num_channels=num_channels,
|
|
|
|
|
|
|
|
num_filters=num_channels * depth_multiplier,
|
|
|
|
|
|
|
|
groups=num_channels,
|
|
|
|
|
|
|
|
filter_size=filter_size,
|
|
|
|
|
|
|
|
stride=stride,
|
|
|
|
|
|
|
|
padding=padding,
|
|
|
|
|
|
|
|
act=LinearActivation(),
|
|
|
|
|
|
|
|
bias_attr=bias_attr,
|
|
|
|
|
|
|
|
param_attr=param_attr,
|
|
|
|
|
|
|
|
shared_biases=shared_bias,
|
|
|
|
|
|
|
|
layer_type=layer_type)
|
|
|
|
|
|
|
|
__pointwise_conv__ = img_conv_layer(
|
|
|
|
|
|
|
|
name="%s_pointwise_conv" % name,
|
|
|
|
|
|
|
|
input=__depthwise_conv__,
|
|
|
|
|
|
|
|
num_channels=num_channels * depth_multiplier,
|
|
|
|
|
|
|
|
num_filters=num_out_channels,
|
|
|
|
|
|
|
|
filter_size=1,
|
|
|
|
|
|
|
|
stride=1,
|
|
|
|
|
|
|
|
padding=0,
|
|
|
|
|
|
|
|
act=act,
|
|
|
|
|
|
|
|
bias_attr=bias_attr,
|
|
|
|
|
|
|
|
param_attr=param_attr,
|
|
|
|
|
|
|
|
shared_biases=shared_bias,
|
|
|
|
|
|
|
|
layer_type=layer_type)
|
|
|
|
|
|
|
|
return __pointwise_conv__
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def small_vgg(input_image, num_channels, num_classes):
|
|
|
|
def small_vgg(input_image, num_channels, num_classes):
|
|
|
|
def __vgg__(ipt, num_filter, times, dropouts, num_channels_=None):
|
|
|
|
def __vgg__(ipt, num_filter, times, dropouts, num_channels_=None):
|
|
|
|
return img_conv_group(
|
|
|
|
return img_conv_group(
|
|
|
|