为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过批量归一化来归一化所有轴?

如何通过批量归一化来归一化所有轴?

紫衣仙女 2022-01-11 18:22:18
据我了解,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)

与批归一化的区别在于,层归一化将操作分别应用于批次中的每个单元。


如果您想对批处理执行此操作,请选择批处理规范。同样,这通过将轴设置为列表来工作。


查看完整回答
反对 回复 2022-01-11
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

不幸的是,我认为使用batch_normalizationtensorflow API的层/功能是不可行的。

正如函数名称所暗示的,它旨在执行“批量”归一化,因此预计在给定当前批次(通常为 0 维)的特征轴上进行归一化。


查看完整回答
反对 回复 2022-01-11
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号