torch 模型搭建部分报错 NotImplementedError

这篇博客记录了作者在使用PyTorch时遇到的一个错误:NotImplementedError。问题源于自定义的Hswish类中,forward方法误写为foward,导致模块在执行时无法找到正确的前向传播方法。作者提供了修复这个问题的方法,并提醒开发者在定义nn.Module子类时要确保实现forward函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大概是这么个报错法,用torch这么些年,第一次碰见这个错NotImplementedError
我用的也不是什么 nightly 版本啊

Traceback (most recent call last):

  File "xxxxx\x.py", line 268, in <module>
    print(x(y).shape)

  File "xxxxx\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)

  File "xxxxx\x.py", line 259, in forward
    x = self.features(x)

  File "xxxxx\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)

  File "xxxxx\lib\site-packages\torch\nn\modules\container.py", line 119, in forward
    input = module(input)

  File "xxxxx\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)

  File "xxxxx\lib\site-packages\torch\nn\modules\module.py", line 201, in _forward_unimplemented
    raise NotImplementedError

NotImplementedError

_call_impl中,调用 self.forward

result = self.forward(*input, **kwargs)

如果继承了nn.Module后,如果你没有自己实现self.forward,则会

raise NotImplementedError

原来,我在些这个函数的时候,确实没有forward 方法hhh:

class Hswish(nn.Module):

    def __init__(self, inplace=True):
        super(Hswish, self).__init__()
        self.inplace = inplace

    def __swish(self, x, beta, inplace=True):
        # 但是这个 swish 并未被 H-swish 所使用
        # 之所以叫 H-swish 是为了让 sigmoid 变 hard
        # 用 Relu6(x+3)/6 去近似
        # 为了在嵌入式上部署,减小了计算量
        return x * F.sigmoid(beta * x, inplace)

    @staticmethod
    def Hsigmoid(x, inplace=True):
        return F.relu6(x + 3, inplace=inplace) / 6

    def foward(self, x):
        return x * self.Hsigmoid(x, self.inplace)

forward 写成了 foward

### 解决在 VSCode 中使用 `torch.randn` 函数时报错的问题 当在 VSCode 中使用 PyTorch 的 `torch.randn` 函数时遇到错误,可能的原因有多种。以下是几种常见原因及其解决方案: #### 1. 环境配置问题 确保已经正确安装并激活了 Python 虚拟环境,并且该环境中已成功安装 PyTorch 库。 可以尝试重新创建虚拟环境并安装依赖项来解决问题: ```bash python -m venv myenv source myenv/bin/activate # Linux 或 macOS myenv\Scripts\activate # Windows pip install torch torchvision torchaudio ``` #### 2. 导入语句缺失或错误 确认脚本顶部包含了必要的导入语句: ```python import torch ``` 如果仅需调用 `randn` 方法,则可简化为: ```python from torch import randn as trandn ``` #### 3. 参数传递不当 检查传给 `torch.randn` 的参数是否符合预期格式。此方法接受多个整型数值作为尺寸参数,也可以接收单个元组形式的尺寸列表[^2]。 例如,要生成一个形状为 `(3, 4)` 的随机张量,应该这样写: ```python random_tensor = torch.randn((3, 4)) print(random_tensor) ``` 而不是像下面这样误用逗号分隔的形式: ```python # 错误示范 random_tensor = torch.randn(3, 4) # 此处应改为 ((3, 4)) 形式的单一参数 ``` #### 4. 数据类型冲突 有时会因为显式指定了不兼容的数据类型而导致报错。默认情况下,`torch.randn` 使用浮点数(float)。除非必要,通常不需要额外指定数据类型。但如果确实需要更改,默认推荐 float 类型即可满足大多数需求。 #### 5. 版本兼容性 考虑到不同版本间的 API 变化可能性,建议查看当前使用的 PyTorch 文档页面获取最新信息,并考虑升级到较新版本以获得更好的支持和服务。 通过以上措施,应当能够有效排除大部分由 `torch.randn` 引发的运行时异常情况。若仍然存在特定类型的错误提示,请提供具体的错误消息以便进一步诊断。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值