【问题标题】:Does Keras BatchNormalization work correctly?Keras BatchNormalization 是否正常工作?
【发布时间】:2021-08-30 10:25:39
【问题描述】:

不确定我是否愚蠢,但 BatchNormalization 产生的值不应该在 -1 和 1 之间吗?已经有很多关于 Keras BatchNormalization 的讨论,我真的找不到我想要的东西。有一天我开始怀疑并尝试了几个测试场景,但没有一个产生我所期望的结果。我什至在 Google Colab 上尝试过版本问题

编辑: 所以,这个问题相当愚蠢。但是,我对初始状态更感兴趣,这就是为什么我将“lr”设置得如此之低并且只运行一个 epoch。

顺便说一句:

tf.__version__
>>> 2.4.1

简单的测试用例:

import tensorflow as tf
import numpy as np

# a = (np.arange(25, dtype=np.float32)/50).reshape(1, 5, 5, 1)
a = np.arange(25, dtype=np.float32).reshape(1, 5, 5, 1)

inputs = tf.keras.layers.Input(shape=[5,5,1])
initializer = tf.random_normal_initializer(1.0, 0.002)
loss_fn = tf.keras.losses.BinaryCrossentropy(from_logits=True)

model = tf.keras.Sequential()
model.add(inputs)
model.add(tf.keras.layers.Conv2D(1, 4, strides=2, padding='same', kernel_initializer=initializer, use_bias=False)) # not really necessary
model.add(tf.keras.layers.BatchNormalization(momentum=0.99, epsilon=0.001, center=True, scale=True))

model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.000000000001), loss=loss_fn, metrics=['accuracy'])
model.fit(a, a[:, 1:4, 1:4, :], epochs=1, batch_size=1)

print(model(a), 0)
>>> tf.Tensor(
[[[[ 8.615232]
   [14.495497]
   [ 8.131738]]

  [[26.24201 ]
   [38.98827 ]
   [20.710234]]

  [[17.929565]
   [25.93689 ]
   [13.535995]]]], shape=(1, 3, 3, 1), dtype=float32) 0

【问题讨论】:

  • 不,这不是 z 分数的工作方式(这是 Batch Norm 使用的)。

标签: python tensorflow keras deep-learning tf.keras


【解决方案1】:

简答!!不!!

您不应期望 BatchNormalization 给出介于 -1 到 1 之间的值。

即使使用 Normalized,您也不应该期望值介于 -1 到 1

但是在 gamma 和 beta 层之后,它会再次膨胀。您所看到的价值观类型

因为在 BatchNormalisation 层中发生了两件事。

  1. 使用均值和标准 $\ddot z$=(z-$\mu$)/$\sigma$ 对层进行归一化
  2. 学习新参数 \gamma 和 \beta z_delta=\gamma *\ddot z+/beta

您可以看到 Batchnorm 层有 4 个参数,其中 2 个不可训练,其中 2 个可训练。

无法正确书写因此上传图片

【讨论】:

  • 将标准偏差归一化为 1 并不会在任何时候将值限制在[-1, 1] 的范围内。
  • 谢谢我再次更新了我的答案
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 2018-10-14
  • 2018-05-12
  • 2018-04-29
  • 2012-12-12
  • 2014-06-18
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多