Tensorflow 使用tf.layers.batch_归一化来预处理SELU激活功能的输入?

Tensorflow 使用tf.layers.batch_归一化来预处理SELU激活功能的输入?,tensorflow,batch-normalization,Tensorflow,Batch Normalization,SELU激活函数()要求对输入进行归一化,使其平均值为0.0,方差为1.0。因此,我尝试对原始数据应用tf.layers.batch_normalization(axis=-1)以满足该要求。每个批次中的原始数据的形状为[批次大小,15],其中15表示特征的数量。下图显示了从tf.layers.batch\u normalization(~20个时代)返回的5个特征的方差。它们并非都像预期的那样接近1.0。平均值也并非都接近0.0(图中未显示) 我应该如何使15个特征都独立地标准化(我希望标准化

SELU激活函数()要求对输入进行归一化,使其平均值为0.0,方差为1.0。因此,我尝试对原始数据应用
tf.layers.batch_normalization
axis=-1
)以满足该要求。每个批次中的原始数据的形状为
[批次大小,15]
,其中15表示特征的数量。下图显示了从
tf.layers.batch\u normalization
(~20个时代)返回的5个特征的方差。它们并非都像预期的那样接近1.0。平均值也并非都接近0.0(图中未显示)

我应该如何使15个特征都独立地标准化(我希望标准化后的每个特征的平均值为0,var为1.0)


在阅读了batch normalization()和SELU()的原始论文后,我对它们有了更好的理解:

  • 批次标准化是一个“隔离”过程,以确保下一层的输入(在任何小批次中)具有固定分布,因此所谓的“偏移方差”问题是固定的。仿射变换(γ*x^+β)只是将标准化的x^调谐到另一个固定分布,以获得更好的表现力。对于简单的规范化,我们需要在调用
    tf.layers.batch_normalization
    时将
    中心
    缩放
    参数设置为
    False

  • 确保
    epsilon
    (仍在
    tf.layers.batch_normalization
    )设置为至少比所有输入数据的最低幅度小2个幅度。
    epsilon
    的默认值设置为0.001。就我而言,某些功能的值低至1e-6。因此,我不得不将ε改为1e-8

  • SELU的输入必须在输入模型之前进行规范化<代码>tf.层。批处理规格化不是为此目的而设计的