知了AI学习平台Logo知了
🧠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 参数。