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数组,所以这是有道理的。
答案 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)
是模型的输出形状。