【发布时间】: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