预期的批次大小与模型输出的批次大小不匹配

时间:2020-02-22 15:18:39

标签: python tensorflow keras

keras功能API是否强加了模型输出中的批处理元素数量等于其输入中的元素数量?例如,下面的代码引发了一个异常:ValueError: Mismatch between expected batch size and model output batch size. Output shape = (1, 1), expected output shape = shape (2, 1)

d = 2
input_ = Input(shape=(d, ))
output_ = keras.layers.Lambda(lambda x: tf.reduce_sum(x, keepdims=True))(input_)
model = keras.Model(name='model', inputs=input_, outputs=output_)

如果我将keepdims设置为false,则会引发另一个异常:ValueError: zero-dimensional arrays cannot be concatenated,因为模型需要一批元素,每个元素都是2d数组,所以这是有道理的。

1 个答案:

答案 0 :(得分:0)

Tensorflow Keras功能API 不一定强加模型输出中的批处理元素数等于其输入中的元素数。
Tensorflow通过将输出形状的 index 0 保留为 None 来处理此问题,因为它与批量大小无关。

但是在这种情况下,当打印model.summary()时,您可以观察到最后一层输出形状固定为(1,1)而不是(None,1)。 如果您使用batch_size = 1馈送数据,而当馈送的数据包含batch_size != 1时会引发错误,则该方法将正常工作。 >

更具体地说:Mismatch between expected batch size and model output batch size. Output shape = (1, 1), expected output shape = shape (BATCH_SIZE, 1)

预期的输出形状(BATCH_SIZE,1)数据的输出形状。
输出形状(1, 1)模型的输出形状。