层归一化及其工作方式(tensorflow)

时间:2018-06-21 17:03:08

标签: python-3.x tensorflow

我很难理解图层归一化。假设我在张量流中训练了一个模型。当我检查图的变量时,得到以下信息:

{{1}}

如您所见,它是一个两层的全连接网络,每一层都进行了标准化。

因此,我知道将偏差添加到节点输入中。变量actor / LayerNorm / beta:0,actor / LayerNorm / gamma:0等是否以相同的方式工作?我能否仅将一层的偏差,β和伽玛值概括为一个“偏差”矢量?还是完全不同的机制?

提前谢谢!

2 个答案:

答案 0 :(得分:3)

beta和gamma变量与偏差变量不同。代码是这样的:

y = tf.matmul(kernel, x) + bias
mean, variance = tf.nn.moments(y, [1], keep_dims=True)
normalized_y = (y - mean) / tf.sqrt(variance + 1e-5)
y_out = normalized_y * gamma + beta

首先,将内核与输入x相乘,然后加上偏差项。然后,您可以计算向量y中值的均值和方差。您可以通过减去平均值并除以总标准偏差来归一化y。最后,您可以通过将每个维度乘以gamma并添加beta来调整y。

答案 1 :(得分:1)

我建议改为使用tensorflow官方仓库中贡献者提供的实现。 这是layer normalization implementation