Skip to content

Commit

Permalink
remove paddle.nn.Sequential to fix dygraph to static error (PaddlePad…
Browse files Browse the repository at this point in the history
  • Loading branch information
GGBond8488 authored Nov 29, 2022
1 parent d926b30 commit de44372
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 74 deletions.
2 changes: 1 addition & 1 deletion python/paddle/nn/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from ..fluid.dygraph.layers import Layer # noqa: F401
from .layer.container import LayerList # noqa: F401
from .layer.container import ParameterList # noqa: F401
from .layer.container import Sequential # noqa: F401
from ..fluid.dygraph.container import Sequential # noqa: F401

from .clip import ClipGradByGlobalNorm # noqa: F401
from .clip import ClipGradByNorm # noqa: F401
Expand Down
73 changes: 0 additions & 73 deletions python/paddle/nn/layer/container.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,79 +299,6 @@ def update(self, sublayers):
self.add_sublayer(kv[0], kv[1])


class Sequential(Layer):
"""Sequential container.
Sub layers will be added to this container in the order of argument in the constructor.
The argument passed to the constructor can be iterable Layers or iterable name Layer pairs.
Parameters:
layers(Layer|list|tuple): Layer or list/tuple of iterable name Layer pair.
Examples:
.. code-block:: python
import paddle
data = paddle.uniform(shape=[30, 10], dtype='float32')
# create Sequential with iterable Layers
model1 = paddle.nn.Sequential(
paddle.nn.Linear(10, 1), paddle.nn.Linear(1, 2)
)
model1[0] # access the first layer
res1 = model1(data) # sequential execution
# create Sequential with name Layer pairs
model2 = paddle.nn.Sequential(
('l1', paddle.nn.Linear(10, 2)),
('l2', paddle.nn.Linear(2, 3))
)
model2['l1'] # access l1 layer
model2.add_sublayer('l3', paddle.nn.Linear(3, 3)) # add sublayer
res2 = model2(data) # sequential execution
"""

def __init__(self, *layers):
super().__init__()
if len(layers) > 0 and isinstance(layers[0], (list, tuple)):
for name, layer in layers:
self.add_sublayer(name, layer)
else:
for idx, layer in enumerate(layers):
self.add_sublayer(str(idx), layer)

def __getitem__(self, name):
if isinstance(name, slice):
return self.__class__(*(list(self._sub_layers.values())[name]))
elif isinstance(name, str):
return self._sub_layers[name]
else:
if name >= len(self._sub_layers):
raise IndexError('index {} is out of range'.format(name))
elif name < 0 and name >= -len(self._sub_layers):
name += len(self._sub_layers)
elif name < -len(self._sub_layers):
raise IndexError('index {} is out of range'.format(name))
return list(self._sub_layers.values())[name]

def __setitem__(self, name, layer):
assert isinstance(layer, Layer)
setattr(self, str(name), layer)

def __delitem__(self, name):
name = str(name)
assert name in self._sub_layers
del self._sub_layers[name]

def __len__(self):
return len(self._sub_layers)

def forward(self, input):
for layer in self._sub_layers.values():
input = layer(input)
return input


class ParameterList(Layer):
"""ParameterList Container.
Expand Down

0 comments on commit de44372

Please sign in to comment.