如何计算神经网络的Xavier初始化中的扇入和扇出?

时间:2017-03-08 11:35:22

标签: initialization deep-learning conv-neural-network

我发现神经网络中权重的Xavier初始化的变化都提到扇入扇出;你能告诉我们这两个参数是如何计算的吗?特别针对这两个例子:

1)初始化卷积层的权重,使用形状[5,5,3,6]的滤波器(宽度,高度,输入深度,输出深度);

2)初始化完全连接层的权重,形状为[400,120](即将400个输入变量映射到120个输出变量上)。

谢谢!

2 个答案:

答案 0 :(得分:2)

我的理解是进出卷积层的扇子定义为:

fan_in = n_feature_maps_in * receptive_field_height * receptive_field_width
fan_out = n_feature_maps_out * receptive_field_height * receptive_field_width / max_pool_area

其中receptive_field_heightreceptive_field_width对应于正在考虑的转化层的那些,max_pool_area是卷积层之后的最大合并的高度和宽度的乘积。

如果我错了,请纠正我。

来源:deeplearning.net

答案 1 :(得分:2)

此答案的灵感来自Matthew Kleinsmith的post关于媒介的CNN可视化,下面的插图摘自Gideon Mendels的post。让我们从如下所示的MLP开始。 understanding fan_in and fan_out

类似地,“转换层”可以可视化为“线性”层。

the image图片

the filter过滤器

Output由于过滤器适合图像四次,因此我们有四个结果

在这里,我们将滤镜应用于图像的每个部分以产生每个结果

enter image description here

等式视图

enter image description here

紧凑方程式视图

enter image description here

现在最重要的是神经网络视图,您可以在其中看到每个输出是由4个输入生成的,因此fan_in = 4。

The compact equation view

如果原始图像是3通道图像,则每个输出将由3 * 4 = 12个输入生成,因此fan_in将为12。因此,

receptive_field_size = kernel_height * kernel_width
fan_in = num_input_feature_maps * receptive_field_size
fan_out = num_output_feature_maps * receptive_field_size

我也鼓励您试用PyTorch函数来计算fan_in和fan_out here.。像这样,参考上面的例子

enter image description here

您可以在我的blog post

中了解有关体重初始化的更多信息

参考

  1. https://medium.com/impactai/cnns-from-different-viewpoints-fab7f52d159c
  2. https://medium.com/comet-ml/selecting-the-right-weight-initialization-for-your-deep-neural-network-780e20671b22