From e28321f9ec591a6d50169217d4904223ad087dc6 Mon Sep 17 00:00:00 2001 From: Renwb1991 <1534609090@qq.com> Date: Mon, 25 Mar 2019 10:50:19 +0800 Subject: [PATCH] caffe2fluid: repair scale --- caffe2fluid/kaffe/paddle/network.py | 37 ++++++++++++++++++----------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/caffe2fluid/kaffe/paddle/network.py b/caffe2fluid/kaffe/paddle/network.py index b1c9ca0..86c6b0e 100644 --- a/caffe2fluid/kaffe/paddle/network.py +++ b/caffe2fluid/kaffe/paddle/network.py @@ -525,16 +525,30 @@ class Network(object): num_axes) prefix = name + '_' - scale_shape = input.shape[axis:axis + num_axes] - param_attr = fluid.ParamAttr(name=prefix + 'scale') - scale_param = fluid.layers.create_parameter( - shape=scale_shape, - dtype=input.dtype, - name=name, - attr=param_attr, - is_bias=True, - default_initializer=fluid.initializer.Constant(value=1.0)) + if isinstance(input, list) and len(input) == 2: + # for two tensor, here resets axis to 1. Maybe there is a bug for unkown case. + axis = 1 + output_shape = input[0].shape[axis:axis + num_axes] + scale_param = input[1] + input = input[0] + else: + output_shape = input.shape[axis:axis + num_axes] + param_attr = fluid.ParamAttr(name=prefix + 'scale') + scale_param = fluid.layers.create_parameter( + shape=output_shape, + dtype=input.dtype, + name=name, + attr=param_attr, + is_bias=True, + default_initializer=fluid.initializer.Constant(value=1.0)) + + output = fluid.layers.elementwise_mul( + input, + scale_param, + axis=axis, + name=self.get_unique_output_name(name, 'scale_mul')) + scale_shape = output_shape offset_attr = fluid.ParamAttr(name=prefix + 'offset') offset_param = fluid.layers.create_parameter( shape=scale_shape, @@ -544,11 +558,6 @@ class Network(object): is_bias=True, default_initializer=fluid.initializer.Constant(value=0.0)) - output = fluid.layers.elementwise_mul( - input, - scale_param, - axis=axis, - name=self.get_unique_output_name(name, 'scale_mul')) output = fluid.layers.elementwise_add( output, offset_param, -- GitLab