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

Fan*_*nta 10 initialization deep-learning conv-neural-network

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

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

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

谢谢!

adi*_*ana 9

这个答案是由马修Kleinsmith的启发对媒体CNN可视化和下面是从拍摄的插图吉迪恩德尔斯。让我们从 MLP 开始,如下所示。 理解 fan_in 和 fan_out.

类似地,一个 Conv 层可以被可视化为一个线性层。

图片 图片

过滤器 过滤器

输出 由于过滤器四次适合图像,我们有四个结果

以下是我们如何将过滤器应用于图像的每个部分以产生每个结果

在此处输入图片说明

等式视图

在此处输入图片说明

紧凑方程视图

在此处输入图片说明

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

紧凑方程视图

如果原始图像是 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
Run Code Online (Sandbox Code Playgroud)

我还鼓励您在这里使用 PyTorch 函数来计算 fan_in 和 fan_out . 有点像这样,参考上面的例子

在此处输入图片说明

您可以在我的博客文章中阅读有关权重初始化的更多信息

参考

  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


Eri*_* H. 4

我的理解是,卷积层的扇入和扇出定义为:

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
Run Code Online (Sandbox Code Playgroud)

其中receptive_field_heightreceptive_field_width对应于所考虑的卷积层,并且max_pool_area是卷积层之后的最大池化的高度和宽度的乘积。

如果我错了,请纠正我。

来源:deeplearning.net

  • 那么在卷积的情况下,fan_in 变为 (kernel_width x kernel_height x in_depth) ?并且 fan_out 变为(kernel_width x kernel_height x out_深度)?张量流代码只是将它们设置为“in”和“out”。代码中没有注释这些实际上是什么。https://github.com/tensorflow/tensorflow/blob/r1.15/tensorflow/contrib/layers/python/layers/initializers.py#L31-L57 (2认同)