🧠AI 冷知识
你知道吗?
这些有趣的 AI 小知识可能让你大吃一惊
🪄
Module的魔法nn.Module的__call__方法会自动调用forward()——你永远不应该手动调用model.forward(x),而应该用model(x)。因为__call__还在forward前后自动执行了钩子(hook)、梯度追踪等一堆"隐形操作",直接调forward会跳过它们。
一句话总结
💡
nn.Module 是所有神经网络层的基类,通过组合子模块自动管理参数并提供 forward 前向传播接口。
常见误区
这些坑别踩
✗
误区 1
forward() 必须显式调用 model.forward(x)。
✓
正确理解
应直接调用 model(x),它会触发 __call__ 从而执行 forward 及注册的钩子(hooks);直接调用 forward 会绕过钩子。
✗
误区 2
在 forward 里直接用裸 Tensor 就行,不需要把层注册为子模块。
✓
正确理解
只有作为属性赋值的 nn.Module 才会自动注册参数并参与设备迁移和保存;直接用 Functional 的 Tensor 不会自动管理参数。
✗
误区 3
nn.Module 只能包含其他 nn.Module。
✓
正确理解
子模块可以是任意层、容器(如 Sequential),也可通过 register_parameter 注册普通 Tensor 参数。