Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug fix]remove paddle.nn.Sequential to fix dygraph to static error #48477

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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