From b130ba73286dfcf60dc800eb8c8625d294acd20f Mon Sep 17 00:00:00 2001 From: Haonan Date: Tue, 20 Sep 2016 22:45:33 -0700 Subject: [PATCH] fixed bugs in conv_operator; add calc_output_size (#101) --- python/paddle/trainer/config_parser.py | 8 +++++--- python/paddle/trainer_config_helpers/layers.py | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/python/paddle/trainer/config_parser.py b/python/paddle/trainer/config_parser.py index 4ce01e005a..79b8521422 100644 --- a/python/paddle/trainer/config_parser.py +++ b/python/paddle/trainer/config_parser.py @@ -636,7 +636,6 @@ class Operator(Cfg): input_layer_names, ): self.add_keys(locals()) - self.operator_conf = OperatorConfig() self.operator_conf.type = self.type @@ -686,12 +685,15 @@ class ConvOperator(Operator): if num_filters is not None: self.operator_conf.num_filters = num_filters - parse_conv(conv_conf, input_layer_names[0], self.operator_conf.conv_conf, True) + parse_conv(conv_conf, + MakeLayerNameInSubmodel(input_layer_names[0]), + self.operator_conf.conv_conf) self.operator_conf.output_size = (self.operator_conf.conv_conf.output_x ** 2) * num_filters config_assert(len(input_layer_names) == 2, "Conv is binary operator") - + def calc_output_size(self, input_sizes): + return self.operator_conf.output_size # please refer to the comments in proto/ModelConfig.proto diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index fab7e6e091..a5bacaf079 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2668,7 +2668,7 @@ def classification_cost(input, label, name=None, return LayerOutput(name, LayerType.COST, parents=[input, label]) def conv_operator(input, filter_size, num_filters, - num_channel=None, stride=1, padding=0, + num_channel=None, stride=1, padding=0, groups=1, filter_size_y=None, stride_y=None, padding_y=None): """ Different from img_conv_layer, conv_op is an Operator, which can be used @@ -2715,7 +2715,7 @@ def conv_operator(input, filter_size, num_filters, stride_y = stride if padding_y is None: padding_y = padding - op = ConvOperator(input_layer_name=[x.name for x in input], + op = ConvOperator(input_layer_names=[x.name for x in input], num_filters = num_filter, conv_conf=Conv(filter_size=filter_size, padding=padding, @@ -2723,7 +2723,8 @@ def conv_operator(input, filter_size, num_filters, channels=num_channel, filter_size_y=filter_size_y, padding_y=padding_y, - stride_y=stride_y)) + stride_y=stride_y, + groups=groups)) op.origin = input op.origin.operator = "conv_op" return op -- GitLab