为什么小批量输出到 Mobilenet 与单个输出不同



我正在尝试检查小批量输出是否等于一一给出小批量的所有元素,以评估Mobilenet的特征向量。

请看下面的代码:

model = tf.keras.models.Sequential(
    (
        hub.KerasLayer("https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4", 
            output_shape=[1280],
            trainable=False
        ),
    )
)
images =  tf.random.uniform(shape=(20, 224, 224, 3))
features = model.predict(images)
for i in range(20):
    image = tf.reshape(images[i, ...], (1, 224, 224, 3))
    image_feature = model.predict(image)
    self.assertTrue((image_feature == features[i, ...]).all())

断言真在我的测试中失败了。它不应该为所有图像提供相同的特征向量,无论它们是作为小批量馈送还是一个接一个地馈送?

我想这与模型使用的平均值和方差(BN层(有关。如果使用训练阶段的移动均值和方差(它们应该是 IMO(,则单个输出应与小批量输出完全相同。差异<= 10e-4仍然足够大,足以给出不一致的预测。

最新更新