本文主要借助代码讲解Xavier和kaiming是如何借助_calculate_fan_in_and_fan_out函数来计算当前网络层的fan_in(输入神经元个数)和fan_out(输出神经元个数的),先针对Linear和Conv2d两种。

m_c = nn.Conv2d(16, 33, 3, stride=2)
m_l = nn.Linear(1, 10)
m_c.weight.size()
m_l.weight.size()
out:
torch.Size([33, 16, 3, 3])
torch.Size([10, 1])
注意看Linear weight的维度为2,而Conv2d的维度为4.
首先判断tensor的维度,如果是二维,则是Linear,
if dimensions == 2: # Linear
fan_in = tensor.size(1)
fan_out = tensor.size(0)
此时:fan_in=in_channelsfan\_in = in\_channels fan_in=in_channels
fan_out=out_channelsfan\_out = out\_channels fan_out=out

本文详细介绍了如何在PyTorch中计算线性层(Linear)和卷积层(Conv2d)的fan_in和fan_out。通过代码示例,解释了当权重张量维度为2时,对应线性层的fan_in等于输入通道数,fan_out等于输出通道数;而在卷积层中,fan_in和fan_out涉及卷积核大小,并通过计算权重张量特定维度的元素数量来确定。
最低0.47元/天 解锁文章
6514

被折叠的 条评论
为什么被折叠?



