自述文件提供以下注释:

/*
The weights for this particular network were batch normalized but for inference we may use :

w =  gamma  / √(s + 0.001), b = ß - ( A * m )

s: variance
m: mean
gamma : gamma
ß: beta

w: weights of a feature channel
b: bias of a feature channel

for every feature channel separately to get the corresponding weights and  bias
*/


我已经能够使用TensorFlow将所有经过训练的参数从经过重新训练的Inception模型导出到二进制文件。例如,对于第一个卷积节点,这些是可用的二进制文件:


conv0 / BatchNorm / beta
conv0 / BatchNorm / beta / ExponentialMovingAverage
conv0 / BatchNorm / beta / RMSProp
conv0 / BatchNorm / beta / RMSProp_1
conv0 / BatchNorm / moving_mean
conv0 / BatchNorm / moving_mean / ExponentialMovingAverage
conv0 / BatchNorm / moving_variance
conv0 / BatchNorm / moving_variance / ExponentialMovingAverage
转换0 /权重
conv0 /权重/指数移动平均
转换0 /权重/调节器/ L2损失/值/平均
转换0 /权重/ RMSProp
conv0 / weights / RMSProp_1


这些文件是否经过转换或重新计算以某种方式获得相应的conv.dat文件,或者TensorFlow中是否存在函数以批处理规范化导出每个节点?

任何额外的指示都将非常有帮助,因为这里没有连接点的资源。

谢谢。

最佳答案

我创建了一个可将Inception v3批标准化的权重转换为MPSCNNConvolution所需的反标准化的权重的存储库。

https://github.com/kakugawa/MetalCNNWeights

在Sergey Ioffe和Christian Szegedy(https://arxiv.org/pdf/1502.03167v3.pdf)的论文“批量归一化:通过减少内部协变量偏移来加速深度网络训练”中,我们可以使用算法2,输出,步骤11得出:

[Weight = \frac{\gamma}{\sqrt{Var[x]+0.001}} * Weight_{BN}](http://mathurl.com/z7snq3z.png)
[Bias = \beta - (\frac{\gamma}{\sqrt{Var[x]+0.001}}) * E[x]](http://mathurl.com/zo4shhf.png)


注意:发布图像或2个链接之前,我需要10个信誉点。

10-08 20:26