From 26638e9cab3e4287b0c90dea3aa5f5d4a81f603d Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Sat, 9 Sep 2017 10:50:57 +0800 Subject: [PATCH 1/3] fix batch_norm parameter share --- python/paddle/trainer/config_parser.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python/paddle/trainer/config_parser.py b/python/paddle/trainer/config_parser.py index 11dc84ae20..12a629a031 100644 --- a/python/paddle/trainer/config_parser.py +++ b/python/paddle/trainer/config_parser.py @@ -2421,6 +2421,11 @@ class BatchNormLayer(LayerBase): psize = self.calc_parameter_size(image_conf) dims = [1, psize] + + self.inputs[1].parameter_name = self.inputs[0].parameter_name.split('.')[0] + '.' + \ + self.inputs[1].parameter_name.split('.')[1] + self.inputs[2].parameter_name = self.inputs[0].parameter_name.split('.')[0] + '.' + \ + self.inputs[2].parameter_name.split('.')[1] self.create_input_parameter(0, psize) self.create_input_parameter(1, psize, dims) self.create_input_parameter(2, psize, dims) From aea05b6e95fe934039bd3d1a7c64bdec5abf5462 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Sat, 9 Sep 2017 11:35:49 +0800 Subject: [PATCH 2/3] add param mean_var_names --- python/paddle/trainer/config_parser.py | 9 +++++---- python/paddle/trainer_config_helpers/layers.py | 4 ++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/python/paddle/trainer/config_parser.py b/python/paddle/trainer/config_parser.py index 12a629a031..9c765b32d3 100644 --- a/python/paddle/trainer/config_parser.py +++ b/python/paddle/trainer/config_parser.py @@ -2366,6 +2366,7 @@ class BatchNormLayer(LayerBase): inputs, bias=True, use_global_stats=True, + mean_var_names=None, moving_average_fraction=0.9, batch_norm_type=None, **xargs): @@ -2421,11 +2422,11 @@ class BatchNormLayer(LayerBase): psize = self.calc_parameter_size(image_conf) dims = [1, psize] + if mean_var_names is not None: + assert len(mean_var_names) == 2 + self.inputs[1].parameter_name = mean_var_names[0] + self.inputs[2].parameter_name = mean_var_names[1] - self.inputs[1].parameter_name = self.inputs[0].parameter_name.split('.')[0] + '.' + \ - self.inputs[1].parameter_name.split('.')[1] - self.inputs[2].parameter_name = self.inputs[0].parameter_name.split('.')[0] + '.' + \ - self.inputs[2].parameter_name.split('.')[1] self.create_input_parameter(0, psize) self.create_input_parameter(1, psize, dims) self.create_input_parameter(2, psize, dims) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index cba45bd3af..4749f38c38 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2957,6 +2957,7 @@ def batch_norm_layer(input, bias_attr=None, param_attr=None, layer_attr=None, + mean_var_names=None, batch_norm_type=None, moving_average_fraction=0.9, use_global_stats=None): @@ -3014,6 +3015,8 @@ def batch_norm_layer(input, :type param_attr: ParameterAttribute :param layer_attr: Extra Layer Attribute. :type layer_attr: ExtraLayerAttribute + :param mean_var_names: [mean name, variance name] + :type mean_var_names: string list :param use_global_stats: whether use moving mean/variance statistics during testing peroid. If None or True, it will use moving mean/variance statistics during @@ -3044,6 +3047,7 @@ def batch_norm_layer(input, active_type=act.name, type=LayerType.BATCH_NORM_LAYER, batch_norm_type=batch_norm_type, + mean_var_names=mean_var_names, bias=ParamAttr.to_bias(bias_attr), moving_average_fraction=moving_average_fraction, use_global_stats=use_global_stats, From 80a8e91fb8c267ef5b2b726fb7110e4d12c96c71 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Sat, 9 Sep 2017 11:54:38 +0800 Subject: [PATCH 3/3] fix order --- python/paddle/trainer/config_parser.py | 2 +- python/paddle/trainer_config_helpers/layers.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python/paddle/trainer/config_parser.py b/python/paddle/trainer/config_parser.py index 9c765b32d3..2a6b6d5e2b 100644 --- a/python/paddle/trainer/config_parser.py +++ b/python/paddle/trainer/config_parser.py @@ -2366,9 +2366,9 @@ class BatchNormLayer(LayerBase): inputs, bias=True, use_global_stats=True, - mean_var_names=None, moving_average_fraction=0.9, batch_norm_type=None, + mean_var_names=None, **xargs): if inputs is None: inputs = [] diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index 4749f38c38..e1703c158a 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2957,10 +2957,10 @@ def batch_norm_layer(input, bias_attr=None, param_attr=None, layer_attr=None, - mean_var_names=None, batch_norm_type=None, moving_average_fraction=0.9, - use_global_stats=None): + use_global_stats=None, + mean_var_names=None): """ Batch Normalization Layer. The notation of this layer as follow. @@ -3015,8 +3015,6 @@ def batch_norm_layer(input, :type param_attr: ParameterAttribute :param layer_attr: Extra Layer Attribute. :type layer_attr: ExtraLayerAttribute - :param mean_var_names: [mean name, variance name] - :type mean_var_names: string list :param use_global_stats: whether use moving mean/variance statistics during testing peroid. If None or True, it will use moving mean/variance statistics during @@ -3029,6 +3027,8 @@ def batch_norm_layer(input, :math:`runningMean = newMean*(1-factor) + runningMean*factor` :type moving_average_fraction: float. + :param mean_var_names: [mean name, variance name] + :type mean_var_names: string list :return: LayerOutput object. :rtype: LayerOutput """ @@ -3047,10 +3047,10 @@ def batch_norm_layer(input, active_type=act.name, type=LayerType.BATCH_NORM_LAYER, batch_norm_type=batch_norm_type, - mean_var_names=mean_var_names, bias=ParamAttr.to_bias(bias_attr), moving_average_fraction=moving_average_fraction, use_global_stats=use_global_stats, + mean_var_names=mean_var_names, **ExtraLayerAttribute.to_kwargs(layer_attr)) return LayerOutput(