def forward(self, pointcloud: torch.cuda.FloatTensor): xyz, features = self._break_up_pc(pointcloud) l_xyz, l_features = [xyz], [features] for i in range(len(self.SA_modules)): li_xyz, li_features = self.SA_modules[i](l_xyz[i], l_features[i]) l_xyz.append(li_xyz) l_features.append(li_features)明明在使用SA_modules时只给了l_xyz和l_features两个参数,怎么会报错说 File "/root/autodl-tmp/project/tools/../lib/net/pointnet2_msg.py", line 154, in forward li_xyz, li_features = self.SA_modules[i](l_xyz[i], l_features[i]) File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) TypeError: forward() takes 2 positional arguments but 3 were given呢?第三个参数是什么呢?而它本身倒底需要什么哪两个参数呢?
时间: 2023-07-15 07:13:28 浏览: 79
torch.cuda.is_available()返回False解决方案
5星 · 资源好评率100%
根据错误提示,`self.SA_modules[i](l_xyz[i], l_features[i])` 这行代码会调用 `SA_modules` 中第 i 个 module 的 `forward` 方法,但是它需要的参数个数是 2,而实际传入了 3 个参数。这个错误提示的第三个参数是指 `self`,也就是 `self.SA_modules[i]` 本身。
在这个代码中,`SA_modules` 是一个包含多个 module 的列表。在 `for` 循环中,对于每个 module,它的 `forward` 方法会被调用一次。这个方法需要两个参数:`l_xyz[i]` 和 `l_features[i]`。这两个参数分别是上一个 module 的输出结果中的点云坐标和特征向量,作为当前 module 的输入。因此,在第一个 module 中,`l_xyz` 和 `l_features` 分别是输入点云的坐标和特征向量。在后续的 module 中,它们则是前一个 module 的输出结果。
阅读全文