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

时间:2019-06-06 16:00:05

标签: python tensorflow2.0 tensorflow-hub

我正在尝试检查微型批处理的输出是否等于对微型批处理的所有元素进行逐一评估以评估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())

assertTrue在我的测试中失败。无论是作为小批量还是逐批馈送,是否都应该为所有图像提供相同的特征向量?

1 个答案:

答案 0 :(得分:0)

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