Skip to content

Commit 5860cc4

Browse files
authored
test=release/1.5, fix multiple Layers parameter missing error in dygraph mode (#19491)
This PR cherry-picked the fix of multiple Layers parameter missing error in dygraph mode,the original one is #18968
1 parent 416922e commit 5860cc4

File tree

3 files changed

+164
-39
lines changed

3 files changed

+164
-39
lines changed

paddle/fluid/API.spec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,8 @@ paddle.fluid.dygraph.LayerNorm.parameters (ArgSpec(args=['self', 'include_sublay
603603
paddle.fluid.dygraph.LayerNorm.state_dict (ArgSpec(args=['self', 'destination', 'include_sublayers'], varargs=None, keywords=None, defaults=(None, True)), ('document', '6adf97f83acf6453d4a6a4b1070f3754'))
604604
paddle.fluid.dygraph.LayerNorm.sublayers (ArgSpec(args=['self', 'include_sublayers'], varargs=None, keywords=None, defaults=(True,)), ('document', '00a881005ecbc96578faf94513bf0d62'))
605605
paddle.fluid.dygraph.LayerNorm.train (ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None), ('document', '6adf97f83acf6453d4a6a4b1070f3754'))
606-
paddle.fluid.dygraph.NCE.__init__ (ArgSpec(args=['self', 'name_scope', 'num_total_classes', 'param_attr', 'bias_attr', 'num_neg_samples', 'sampler', 'custom_dist', 'seed', 'is_sparse'], varargs=None, keywords=None, defaults=(None, None, None, 'uniform', None, 0, False)), ('document', '6adf97f83acf6453d4a6a4b1070f3754'))
606+
paddle.fluid.dygraph.NCE ('paddle.fluid.dygraph.nn.NCE', ('document', '47eb439a5568468fad70235f1e61ead9'))
607+
paddle.fluid.dygraph.NCE.__init__ (ArgSpec(args=['self', 'name_scope', 'num_total_classes', 'sample_weight', 'param_attr', 'bias_attr', 'num_neg_samples', 'sampler', 'custom_dist', 'seed', 'is_sparse'], varargs=None, keywords=None, defaults=(None, None, None, None, 'uniform', None, 0, False)), ('document', '6adf97f83acf6453d4a6a4b1070f3754'))
607608
paddle.fluid.dygraph.NCE.add_parameter (ArgSpec(args=['self', 'name', 'parameter'], varargs=None, keywords=None, defaults=None), ('document', 'f35ab374c7d5165c3daf3bd64a5a2ec1'))
608609
paddle.fluid.dygraph.NCE.add_sublayer (ArgSpec(args=['self', 'name', 'sublayer'], varargs=None, keywords=None, defaults=None), ('document', '839ff3c0534677ba6ad8735c3fd4e995'))
609610
paddle.fluid.dygraph.NCE.backward (ArgSpec(args=['self'], varargs='inputs', keywords=None, defaults=None), ('document', '6adf97f83acf6453d4a6a4b1070f3754'))

python/paddle/fluid/dygraph/nn.py

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from ..param_attr import ParamAttr
2424
from ..initializer import Normal, Constant, NumpyArrayInitializer
2525
import numpy as np
26+
import logging
2627

2728
__all__ = [
2829
'Conv2D', 'Conv3D', 'Pool2D', 'FC', 'BatchNorm', 'Embedding', 'GRUUnit',
@@ -1374,13 +1375,20 @@ def _build_once(self, input):
13741375
shape=param_shape,
13751376
dtype=self._dtype,
13761377
default_initializer=Constant(1.0))
1378+
else:
1379+
if self._param_attr:
1380+
logging.warn("param_attr are only avaliable with scale is True")
1381+
13771382
if self._shift:
13781383
assert self._bias_attr is not False
13791384
self._bias_w = self.create_parameter(
13801385
attr=self._bias_attr,
13811386
shape=param_shape,
13821387
dtype=self._dtype,
13831388
is_bias=True)
1389+
else:
1390+
if self._bias_attr:
1391+
logging.warn("bias_attr are only avaliable with shift is True")
13841392

13851393
def forward(self, input):
13861394
inputs = dict()
@@ -1410,7 +1418,7 @@ def forward(self, input):
14101418
"begin_norm_axis": self._begin_norm_axis
14111419
})
14121420

1413-
return self._helper.append_activation(layer_norm_out)
1421+
return self._helper.append_activation(layer_norm_out, act=self._act)
14141422

14151423

14161424
class GRUUnit(layers.Layer):
@@ -1648,6 +1656,7 @@ class NCE(layers.Layer):
16481656
def __init__(self,
16491657
name_scope,
16501658
num_total_classes,
1659+
sample_weight=None,
16511660
param_attr=None,
16521661
bias_attr=None,
16531662
num_neg_samples=None,
@@ -1661,7 +1670,7 @@ def __init__(self,
16611670
self._num_total_classes = num_total_classes
16621671

16631672
self._inputs = dict()
1664-
1673+
self._inputs['SampleWeight'] = sample_weight if sample_weight is not None else []
16651674
if sampler == "uniform":
16661675
sampler = 0
16671676
elif sampler == "log_uniform":
@@ -1939,17 +1948,17 @@ def _build_once(self, x, y):
19391948
dtype=self._dtype,
19401949
is_bias=False)
19411950

1942-
if self._bias_attr:
1943-
bias_size = [1, self._size]
1944-
bias = self.create_parameter(
1945-
attr=self._bias_attr,
1946-
shape=bias_size,
1947-
dtype=self._dtype,
1948-
is_bias=True)
1949-
self._inputs["Bias"] = bias
1951+
bias_size = [1, self._size]
1952+
self._bias_param = self.create_parameter(
1953+
attr=self._bias_attr,
1954+
shape=bias_size,
1955+
dtype=self._dtype,
1956+
is_bias=True)
19501957

19511958
def forward(self, x, y):
19521959
self._inputs = {"X": x, "Y": y, "Weight": self._w}
1960+
if self._bias_param:
1961+
self._inputs["Bias"] = self._bias_param
19531962
if self._name is not None:
19541963
out = self._helper.create_variable(
19551964
name=".".join([self.full_name(), self._name]),
@@ -1964,7 +1973,7 @@ def forward(self, x, y):
19641973
outputs={"Out": out})
19651974

19661975
# add activation
1967-
return self._helper.append_activation(out)
1976+
return self._helper.append_activation(out, act=self._act)
19681977

19691978

19701979
class Conv2DTranspose(layers.Layer):
@@ -2099,6 +2108,7 @@ def __init__(self,
20992108
assert param_attr is not False, "param_attr should not be False in conv2d_transpose."
21002109
self._param_attr = param_attr
21012110
self._bias_attr = bias_attr
2111+
self._act = act
21022112
self._groups = groups
21032113
self._num_filters = num_filters
21042114
self._use_cudnn = use_cudnn
@@ -2162,6 +2172,12 @@ def _build_once(self, input):
21622172
self._img_filter = self.create_parameter(
21632173
dtype=input.dtype, shape=filter_shape, attr=self._param_attr)
21642174

2175+
self._bias_param = self.create_parameter(
2176+
attr=self._bias_attr,
2177+
shape=[self._num_filters],
2178+
dtype=self._dtype,
2179+
is_bias=True)
2180+
21652181
def forward(self, input):
21662182
pre_bias = self._helper.create_variable_for_type_inference(
21672183
dtype=input.dtype)
@@ -2179,8 +2195,19 @@ def forward(self, input):
21792195
'use_cudnn': self._use_cudnn
21802196
})
21812197

2182-
pre_act = self._helper.append_bias_op(pre_bias, dim_start=1, dim_end=2)
2183-
out = self._helper.append_activation(pre_act)
2198+
if self._bias_param is not None:
2199+
pre_act = self._helper.create_variable_for_type_inference(
2200+
dtype=self._dtype)
2201+
self._helper.append_op(
2202+
type='elementwise_add',
2203+
inputs={'X': [pre_bias],
2204+
'Y': [self._bias_param]},
2205+
outputs={'Out': [pre_act]},
2206+
attrs={'axis': 1})
2207+
else:
2208+
pre_act = pre_bias
2209+
2210+
out = self._helper.append_activation(pre_act, act=self._act)
21842211
return out
21852212

21862213

@@ -2230,13 +2257,20 @@ def __init__(self,
22302257
self._padding = padding
22312258
self._bias_attr = bias_attr
22322259
self._param_attr = param_attr
2260+
self._act = act
22332261

22342262
def _build_once(self, input):
22352263
self._dtype = self._helper.input_dtype(input)
22362264
filter_shape = [self._filter_size * input.shape[1], self._num_filters]
22372265
self._filter_param = self.create_parameter(
22382266
attr=self._param_attr, shape=filter_shape, dtype=self._dtype)
22392267

2268+
self._bias_param = self.create_parameter(
2269+
attr=self._bias_attr,
2270+
shape=[self._num_filters],
2271+
dtype=self._dtype,
2272+
is_bias=True)
2273+
22402274
def forward(self, input):
22412275
pre_bias = self._helper.create_variable_for_type_inference(self._dtype)
22422276
self._helper.append_op(
@@ -2251,8 +2285,20 @@ def forward(self, input):
22512285
'contextStart': -int(self._filter_size // 2),
22522286
'contextLength': self._filter_size
22532287
})
2254-
pre_act = self._helper.append_bias_op(pre_bias)
2255-
return self._helper.append_activation(pre_act)
2288+
2289+
if self._bias_param is not None:
2290+
pre_act = self._helper.create_variable_for_type_inference(
2291+
dtype=self._dtype)
2292+
self._helper.append_op(
2293+
type='elementwise_add',
2294+
inputs={'X': [pre_bias],
2295+
'Y': [self._bias_param]},
2296+
outputs={'Out': [pre_act]},
2297+
attrs={'axis': 1})
2298+
else:
2299+
pre_act = pre_bias
2300+
2301+
return self._helper.append_activation(pre_act, act=self._act)
22562302

22572303

22582304
class RowConv(layers.Layer):
@@ -2614,6 +2660,7 @@ def forward(self, nodes_vector, edge_set):
26142660
out = self.create_variable(
26152661
name=self._name, dtype=self._dtype, persistable=False)
26162662
else:
2663+
26172664
out = self._helper.create_variable_for_type_inference(
26182665
dtype=self._dtype)
26192666

0 commit comments

Comments
 (0)