Moh*_*mba 4 initialization pytorch
我已经阅读了几个使用nn.init.kaiming_normal_()PyTorch进行层初始化的代码。某些代码使用fan in默认模式。在众多示例中,可以在此处找到一个示例并显示如下。
init.kaiming_normal(m.weight.data, a=0, mode='fan_in')
Run Code Online (Sandbox Code Playgroud)
但是,有时我会看到人们使用此处和下图所示的fan out模式。
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
Run Code Online (Sandbox Code Playgroud)
有人可以给我一些指导方针或提示来帮助我决定选择哪种模式吗?此外,我正在使用 PyTorch 进行图像超分辨率和去噪任务,哪种模式更有益。
根据文档:
选择“fan_in”会保留前向传递中权重方差的大小。选择“fan_out”会保留向后传递的幅度。
并根据深入研究整流器:在 ImageNet 分类上超越人类水平的表现 - He, K. 等人。(2015) :
我们注意到使用 Eqn.(14) 或 Eqn.(10) 就足够了
其中方程(10)和方程(14)是fan_in和fan_out适当的。此外:
这意味着如果初始化适当地缩放后向信号,那么前向信号也是这种情况;反之亦然。对于本文中的所有模型,两种形式都可以使它们收敛
所以总而言之,这并不重要但更重要的是你追求的是什么。我假设如果您怀疑您的反向传递可能更“混乱”(更大的差异),那么值得将模式更改为fan_out. 当损失波动很大时,可能会发生这种情况(例如,非常简单的例子后跟非常困难的例子)。
的正确选择nonlinearity更重要,您当前正在初始化的图层之后nonlinearity使用的激活在哪里。当前默认值将其设置为with ,这实际上与. 如果你正在使用你应该改变它的斜率。leaky_relua=0reluleaky_relua
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |