我找不到解释keras输入的API。
什么时候应该使用shape属性vs batch_shape属性?
答案 0 :(得分:4)
参数
shape: A shape tuple (integer), not including the batch size. For instance, `shape=(32,)` indicates that the expected input will be batches of 32-dimensional vectors. batch_shape: A shape tuple (integer), including the batch size. For instance, `batch_shape=(10, 32)` indicates that the expected input will be batches of 10 32-dimensional vectors. `batch_shape=(None, 32)` indicates batches of an arbitrary number of 32-dimensional vectors.
批量大小是您的训练数据中有多少个例子。
你可以使用任何。我个人从来没用过“batch_shape”。当您使用“形状”时,您的批次可以是任何大小,您不必关心它。
shape=(32,)
表示与batch_shape=(None,32)
答案 1 :(得分:2)
要扩展Daniel的答案,我发现一种情况,当您在函数中使用有状态LSTM时,有必要在batch_shape
层中指定shape
而不是Input
API。 Phillipe Remy's blog中对此进行了很好的描述。简而言之,有状态模式使您可以将LSTM中的隐藏状态值跨批次保留(如果设置了默认stateful=False
,通常每个批次都会重置该值)。这意味着它需要有关批量大小的知识,以便正确地调整所有内容。如果您不这样做,它会对您大喊:
ValueError: If a RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors:
- If using a Sequential model, specify the batch size by passing a `batch_input_shape` argument to your first layer.
- If using the functional API, specify the batch size by passing a `batch_shape` argument to your Input layer.
第二点是相关的一点。如果将LSTM与功能性API中的stateful=True
一起使用,则需要为batch_shape
层设置Input
。