我试图通过逐步推进我的推理模型的前向传递手动可视化激活,我似乎在我的批量规范步骤中进行了不正确的计算。我可以验证我的卷积的输出是相同的,但是当我执行批量规范计算时,我的批量规范的张量流输出与我手工计算的输出不同,这让我觉得我必须误解它是如何实现的。考虑模型图的相关部分:
conv1 = tf.layers.conv1d(...)
conv1_batch = tf.layers.batch_normalization(
conv1,axis=-1,training = mode == Modes.TRAIN)
我的批量规范远期通行证如下:
def batch_norm_forward(X_in, MA, MV, G, B):
X_ma = X_in - MA # normalization mean shift
X_norm = X_ma / np.sqrt(MV) # normalization scale
Y_scale = X_norm * G # gamma scale
Y = Y_scale + B # beta shift
return Y
虽然我非常确信我的batch_norm_forward()
函数是正确的,但如果我将conv1
的输出传递给batch_norm_forward(conv1,...)
,我得到的答案与{{}的tensorflows输出相同1}}。
我获得了conv1_batch
,MA
,MV
&来自tensorflow图的G
,代码如下:
B
我的批量规范实施中是否有任何可能缺失的内容?