我发现神经网络中权重的Xavier初始化的变化都提到扇入和扇出;你能告诉我们这两个参数是如何计算的吗?特别针对这两个例子:
1)初始化卷积层的权重,使用形状[5,5,3,6]的滤波器(宽度,高度,输入深度,输出深度);
2)初始化完全连接层的权重,形状为[400,120](即将400个输入变量映射到120个输出变量上)。
谢谢!
答案 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_height
和receptive_field_width
对应于正在考虑的转化层的那些,max_pool_area
是卷积层之后的最大合并的高度和宽度的乘积。
如果我错了,请纠正我。
答案 1 :(得分:2)
此答案的灵感来自Matthew Kleinsmith的post关于媒介的CNN可视化,下面的插图摘自Gideon Mendels的post。让我们从如下所示的MLP开始。 。
类似地,“转换层”可以可视化为“线性”层。
在这里,我们将滤镜应用于图像的每个部分以产生每个结果
等式视图
紧凑方程式视图
现在最重要的是神经网络视图,您可以在其中看到每个输出是由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
我也鼓励您试用PyTorch函数来计算fan_in和fan_out here.。像这样,参考上面的例子
您可以在我的blog post
中了解有关体重初始化的更多信息参考