We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Bug in sequential repeat when the layer has no parameters
**problems Statement**
In `init` mode, the repeated layer will be reset. In `Pytorch`, we used `reset_parameters` function to reset the parameters of layers, as here:
https://github.com/pfnet/pytorch-pfn-extras/blob/92dad97e3a3eaafb9eb2b2b804266b5ef922e4c7/pytorch_pfn_extras/nn/modules/extended_sequential.py#L15

However, there are layers have no parameters nor `reset_parameters`, such as `torch.nn.ReLU`. An error is raised when the model contains such layer.

**Error Message**
```
pytorch_pfn_extras/nn/modules/extended_sequential.py:68: in repeat
    model_list.append(self._copy_model(mode))
pytorch_pfn_extras/nn/modules/extended_sequential.py:27: in _copy_model
    return _reset_parameters(copy.deepcopy(self))
pytorch_pfn_extras/nn/modules/extended_sequential.py:9: in _reset_parameters
    _reset_parameters(submodel)
pytorch_pfn_extras/nn/modules/extended_sequential.py:17: in _reset_parameters
    model.reset_parameters()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = ReLU(), name = 'reset_parameters'

    def __getattr__(self, name):
        if '_parameters' in self.__dict__:
            _parameters = self.__dict__['_parameters']
            if name in _parameters:
                return _parameters[name]
        if '_buffers' in self.__dict__:
            _buffers = self.__dict__['_buffers']
            if name in _buffers:
                return _buffers[name]
        if '_modules' in self.__dict__:
            modules = self.__dict__['_modules']
            if name in modules:
                return modules[name]
        raise AttributeError("'{}' object has no attribute '{}'".format(
>           type(self).__name__, name))
E       AttributeError: 'ReLU' object has no attribute 'reset_parameters'
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `pytorch_pfn_extras/nn/modules/extended_sequential.py`
Content:
```
1 import torch
2 import copy
3 
4 
5 def _reset_parameters(model):
6     if isinstance(model, torch.nn.Sequential) or \
7        isinstance(model, torch.nn.ModuleList):
8         for submodel in model:
9             _reset_parameters(submodel)
10     elif isinstance(model, torch.nn.ModuleDict):
11         for submodel in model.values():
12             _reset_parameters(submodel)
13     else:
14         if isinstance(model, torch.nn.Module):
15             model.reset_parameters()
16     return model
17 
18 
19 class ExtendedSequential(torch.nn.Sequential):
20     """Sequential module with extended features from chainer.
21 
22     """
23     def _copy_model(self, mode):
24         if mode == 'init':
25             return _reset_parameters(copy.deepcopy(self))
26         elif mode == 'copy':
27             return copy.deepcopy(self)
28         else:
29             # mode == share
30             return copy.copy(self)
31 
32     def repeat(self, n_repeat: int, mode: 'str' = 'init'):
33         """Repeats this Sequential multiple times.
34 
35         This method returns a :class:`~torch.nn.Sequential` object which has
36         original `Sequential` multiple times repeatedly. The ``mode``
37         argument means how to copy this sequential to repeat.
38 
39         The functions is supposed to behave the same way as `repeat`
40         in `chainer`.
41 
42         Args:
43             n_repeat (int): Number of times to repeat.
44             mode (str): It should be either ``init``, ``copy``, or ``share``.
45                 ``init`` means parameters of each repeated element in the
46                 returned :class:`~torch.nn.Sequential` will be re-initialized,
47                 so that all elements have different initial parameters.
48                 ``copy`` means that the parameters will not be re-initialized
49                 but object itself will be deep-copied, so that all elements
50                 have same initial parameters but can be changed independently.
51                 ``share`` means all the elements which consist the resulting
52                 :class:`~torch.nn.Sequential` object are same object because
53                 they are shallow-copied, so that all parameters of elements
54                 are shared with each other.
55         """
56         if n_repeat <= 0:
57             return ExtendedSequential()
58 
59         if mode not in ['copy', 'share', 'init']:
60             raise ValueError(
61                 'The \'mode\' argument should be either \'init\','
62                 '\'copy\', or \'share\'. But {} was given.'.format(mode))
63 
64         model_list = []
65         for _ in range(n_repeat):
66             model_list.append(self._copy_model(mode))
67         return ExtendedSequential(*model_list)
68
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/pytorch_pfn_extras/nn/modules/extended_sequential.py b/pytorch_pfn_extras/nn/modules/extended_sequential.py
--- a/pytorch_pfn_extras/nn/modules/extended_sequential.py
+++ b/pytorch_pfn_extras/nn/modules/extended_sequential.py
@@ -1,5 +1,6 @@
 import torch
 import copy
+import warnings
 
 
 def _reset_parameters(model):
@@ -11,8 +12,19 @@
         for submodel in model.values():
             _reset_parameters(submodel)
     else:
-        if isinstance(model, torch.nn.Module):
+        if hasattr(model, 'reset_parameters'):
             model.reset_parameters()
+        elif hasattr(model, '_reset_parameters'):
+            model._reset_parameters()
+        else:
+            if (len(list(model.parameters())) != 0 or
+                    len(list(model.buffers())) != 0):
+                warnings.warn('Cannot reset the parameters of module {}. '
+                              'Consider adding `reset_parameters` or '
+                              '`_reset_parameters` '
+                              'functions to the module'.format(model),
+                              UserWarning)
+
     return model
 
 
@@ -39,6 +51,18 @@
         The functions is supposed to behave the same way as `repeat`
         in `chainer`.
 
+        When the mode is set to ``init``, the default value,
+        modules will be copied and reinitialized by calling
+        ``reset_parameters`` (or ``_reset_parameters``) method.
+
+        To repeat user-defined modules, which have parameters or buffers,
+        with mode=``init`` in this Sequential,
+        you need to implement the ``reset_parameters`` or ``_reset_parameters``
+        method to the module to reinitialize parameters
+        and (if necessary) buffers;
+        otherwise the initialization cannot be performed
+        and a warning message will be shown.
+
         Args:
             n_repeat (int): Number of times to repeat.
             mode (str): It should be either ``init``, ``copy``, or ``share``.

{"golden_diff": "diff --git a/pytorch_pfn_extras/nn/modules/extended_sequential.py b/pytorch_pfn_extras/nn/modules/extended_sequential.py\n--- a/pytorch_pfn_extras/nn/modules/extended_sequential.py\n+++ b/pytorch_pfn_extras/nn/modules/extended_sequential.py\n@@ -1,5 +1,6 @@\n import torch\n import copy\n+import warnings\n \n \n def _reset_parameters(model):\n@@ -11,8 +12,19 @@\n         for submodel in model.values():\n             _reset_parameters(submodel)\n     else:\n-        if isinstance(model, torch.nn.Module):\n+        if hasattr(model, 'reset_parameters'):\n             model.reset_parameters()\n+        elif hasattr(model, '_reset_parameters'):\n+            model._reset_parameters()\n+        else:\n+            if (len(list(model.parameters())) != 0 or\n+                    len(list(model.buffers())) != 0):\n+                warnings.warn('Cannot reset the parameters of module {}. '\n+                              'Consider adding `reset_parameters` or '\n+                              '`_reset_parameters` '\n+                              'functions to the module'.format(model),\n+                              UserWarning)\n+\n     return model\n \n \n@@ -39,6 +51,18 @@\n         The functions is supposed to behave the same way as `repeat`\n         in `chainer`.\n \n+        When the mode is set to ``init``, the default value,\n+        modules will be copied and reinitialized by calling\n+        ``reset_parameters`` (or ``_reset_parameters``) method.\n+\n+        To repeat user-defined modules, which have parameters or buffers,\n+        with mode=``init`` in this Sequential,\n+        you need to implement the ``reset_parameters`` or ``_reset_parameters``\n+        method to the module to reinitialize parameters\n+        and (if necessary) buffers;\n+        otherwise the initialization cannot be performed\n+        and a warning message will be shown.\n+\n         Args:\n             n_repeat (int): Number of times to repeat.\n             mode (str): It should be either ``init``, ``copy``, or ``share``.\n", "issue": "Bug in sequential repeat when the layer has no parameters\n**problems Statement**\r\nIn `init` mode, the repeated layer will be reset. In `Pytorch`, we used `reset_parameters` function to reset the parameters of layers, as here:\r\nhttps://github.com/pfnet/pytorch-pfn-extras/blob/92dad97e3a3eaafb9eb2b2b804266b5ef922e4c7/pytorch_pfn_extras/nn/modules/extended_sequential.py#L15\r\n\r\nHowever, there are layers have no parameters nor `reset_parameters`, such as `torch.nn.ReLU`. An error is raised when the model contains such layer.\r\n\r\n**Error Message**\r\n```\r\npytorch_pfn_extras/nn/modules/extended_sequential.py:68: in repeat\r\n    model_list.append(self._copy_model(mode))\r\npytorch_pfn_extras/nn/modules/extended_sequential.py:27: in _copy_model\r\n    return _reset_parameters(copy.deepcopy(self))\r\npytorch_pfn_extras/nn/modules/extended_sequential.py:9: in _reset_parameters\r\n    _reset_parameters(submodel)\r\npytorch_pfn_extras/nn/modules/extended_sequential.py:17: in _reset_parameters\r\n    model.reset_parameters()\r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\n\r\nself = ReLU(), name = 'reset_parameters'\r\n\r\n    def __getattr__(self, name):\r\n        if '_parameters' in self.__dict__:\r\n            _parameters = self.__dict__['_parameters']\r\n            if name in _parameters:\r\n                return _parameters[name]\r\n        if '_buffers' in self.__dict__:\r\n            _buffers = self.__dict__['_buffers']\r\n            if name in _buffers:\r\n                return _buffers[name]\r\n        if '_modules' in self.__dict__:\r\n            modules = self.__dict__['_modules']\r\n            if name in modules:\r\n                return modules[name]\r\n        raise AttributeError(\"'{}' object has no attribute '{}'\".format(\r\n>           type(self).__name__, name))\r\nE       AttributeError: 'ReLU' object has no attribute 'reset_parameters'\r\n```\n", "before_files": [{"content": "import torch\nimport copy\n\n\ndef _reset_parameters(model):\n    if isinstance(model, torch.nn.Sequential) or \\\n       isinstance(model, torch.nn.ModuleList):\n        for submodel in model:\n            _reset_parameters(submodel)\n    elif isinstance(model, torch.nn.ModuleDict):\n        for submodel in model.values():\n            _reset_parameters(submodel)\n    else:\n        if isinstance(model, torch.nn.Module):\n            model.reset_parameters()\n    return model\n\n\nclass ExtendedSequential(torch.nn.Sequential):\n    \"\"\"Sequential module with extended features from chainer.\n\n    \"\"\"\n    def _copy_model(self, mode):\n        if mode == 'init':\n            return _reset_parameters(copy.deepcopy(self))\n        elif mode == 'copy':\n            return copy.deepcopy(self)\n        else:\n            # mode == share\n            return copy.copy(self)\n\n    def repeat(self, n_repeat: int, mode: 'str' = 'init'):\n        \"\"\"Repeats this Sequential multiple times.\n\n        This method returns a :class:`~torch.nn.Sequential` object which has\n        original `Sequential` multiple times repeatedly. The ``mode``\n        argument means how to copy this sequential to repeat.\n\n        The functions is supposed to behave the same way as `repeat`\n        in `chainer`.\n\n        Args:\n            n_repeat (int): Number of times to repeat.\n            mode (str): It should be either ``init``, ``copy``, or ``share``.\n                ``init`` means parameters of each repeated element in the\n                returned :class:`~torch.nn.Sequential` will be re-initialized,\n                so that all elements have different initial parameters.\n                ``copy`` means that the parameters will not be re-initialized\n                but object itself will be deep-copied, so that all elements\n                have same initial parameters but can be changed independently.\n                ``share`` means all the elements which consist the resulting\n                :class:`~torch.nn.Sequential` object are same object because\n                they are shallow-copied, so that all parameters of elements\n                are shared with each other.\n        \"\"\"\n        if n_repeat <= 0:\n            return ExtendedSequential()\n\n        if mode not in ['copy', 'share', 'init']:\n            raise ValueError(\n                'The \\'mode\\' argument should be either \\'init\\','\n                '\\'copy\\', or \\'share\\'. But {} was given.'.format(mode))\n\n        model_list = []\n        for _ in range(n_repeat):\n            model_list.append(self._copy_model(mode))\n        return ExtendedSequential(*model_list)\n", "path": "pytorch_pfn_extras/nn/modules/extended_sequential.py"}], "after_files": [{"content": "import torch\nimport copy\nimport warnings\n\n\ndef _reset_parameters(model):\n    if isinstance(model, torch.nn.Sequential) or \\\n       isinstance(model, torch.nn.ModuleList):\n        for submodel in model:\n            _reset_parameters(submodel)\n    elif isinstance(model, torch.nn.ModuleDict):\n        for submodel in model.values():\n            _reset_parameters(submodel)\n    else:\n        if hasattr(model, 'reset_parameters'):\n            model.reset_parameters()\n        elif hasattr(model, '_reset_parameters'):\n            model._reset_parameters()\n        else:\n            if (len(list(model.parameters())) != 0 or\n                    len(list(model.buffers())) != 0):\n                warnings.warn('Cannot reset the parameters of module {}. '\n                              'Consider adding `reset_parameters` or '\n                              '`_reset_parameters` '\n                              'functions to the module'.format(model),\n                              UserWarning)\n\n    return model\n\n\nclass ExtendedSequential(torch.nn.Sequential):\n    \"\"\"Sequential module with extended features from chainer.\n\n    \"\"\"\n    def _copy_model(self, mode):\n        if mode == 'init':\n            return _reset_parameters(copy.deepcopy(self))\n        elif mode == 'copy':\n            return copy.deepcopy(self)\n        else:\n            # mode == share\n            return copy.copy(self)\n\n    def repeat(self, n_repeat: int, mode: 'str' = 'init'):\n        \"\"\"Repeats this Sequential multiple times.\n\n        This method returns a :class:`~torch.nn.Sequential` object which has\n        original `Sequential` multiple times repeatedly. The ``mode``\n        argument means how to copy this sequential to repeat.\n\n        The functions is supposed to behave the same way as `repeat`\n        in `chainer`.\n\n        When the mode is set to ``init``, the default value,\n        modules will be copied and reinitialized by calling\n        ``reset_parameters`` (or ``_reset_parameters``) method.\n\n        To repeat user-defined modules, which have parameters or buffers,\n        with mode=``init`` in this Sequential,\n        you need to implement the ``reset_parameters`` or ``_reset_parameters``\n        method to the module to reinitialize parameters\n        and (if necessary) buffers;\n        otherwise the initialization cannot be performed\n        and a warning message will be shown.\n\n        Args:\n            n_repeat (int): Number of times to repeat.\n            mode (str): It should be either ``init``, ``copy``, or ``share``.\n                ``init`` means parameters of each repeated element in the\n                returned :class:`~torch.nn.Sequential` will be re-initialized,\n                so that all elements have different initial parameters.\n                ``copy`` means that the parameters will not be re-initialized\n                but object itself will be deep-copied, so that all elements\n                have same initial parameters but can be changed independently.\n                ``share`` means all the elements which consist the resulting\n                :class:`~torch.nn.Sequential` object are same object because\n                they are shallow-copied, so that all parameters of elements\n                are shared with each other.\n        \"\"\"\n        if n_repeat <= 0:\n            return ExtendedSequential()\n\n        if mode not in ['copy', 'share', 'init']:\n            raise ValueError(\n                'The \\'mode\\' argument should be either \\'init\\','\n                '\\'copy\\', or \\'share\\'. But {} was given.'.format(mode))\n\n        model_list = []\n        for _ in range(n_repeat):\n            model_list.append(self._copy_model(mode))\n        return ExtendedSequential(*model_list)\n", "path": "pytorch_pfn_extras/nn/modules/extended_sequential.py"}]}