据我了解,tf.layers.batch_normalization我定义的轴是标准化的轴。简单的说:鉴于这些值a = [[0, 2],
[1, 4]]形状为 (2, 2),因此轴为 0 和 1。对轴 1 进行归一化意味着将轴 0 减少到其平均值和标准偏差,然后将这些值用于归一化。所以bn = tf.layers.batch_normalization(a, axis=[1])会有(几乎)相同的结果m, v = tf.nn.moments(a, axes=[0])
bn = (a - m) / tf.sqrt(v)但是我将如何tf.layers.batch_normalization处理所有轴?使用之前的平均值和标准差计算将很容易:m, v = tf.nn.moments(a, axes=[0, 1])
bn = (a - m) / tf.sqrt(v)但是如何通过批量标准化来做到这一点?bn = tf.layers.batch_normalization(a, axis=[???])我尝试了以下不起作用的方法:axis = None: AttributeError: 'BatchNormalization' object has no attribute 'axis'axis = []: IndexError: list index out of rangeaxis = [0, 1]: 所有结果为零
2 回答

白板的微信
TA贡献1883条经验 获得超3个赞
这可以通过层标准化来实现:
>>> data = tf.constant(np.arange(10).reshape(5, 2) * 10, dtype=tf.float32)
layer = tf.keras.layers.LayerNormalization(axis=[0, 1])
output = layer(data)
print(output)
tf.Tensor(
[[-1.5666981 -1.2185429 ]
[-0.8703878 -0.5222327 ]
[-0.17407757 0.17407756]
[ 0.52223265 0.8703878 ]
[ 1.2185429 1.5666981 ]], shape=(5, 2), dtype=float32)
与批归一化的区别在于,层归一化将操作分别应用于批次中的每个单元。
如果您想对批处理执行此操作,请选择批处理规范。同样,这通过将轴设置为列表来工作。

MMMHUHU
TA贡献1834条经验 获得超8个赞
不幸的是,我认为使用batch_normalization
tensorflow API的层/功能是不可行的。
正如函数名称所暗示的,它旨在执行“批量”归一化,因此预计在给定当前批次(通常为 0 维)的特征轴上进行归一化。
添加回答
举报
0/150
提交
取消