什么时候在keras中使用输入形状vs batch_shape?

时间:2017-06-28 01:00:20

标签: keras shape

我找不到解释keras输入的API。

什么时候应该使用shape属性vs batch_shape属性?

2 个答案:

答案 0 :(得分:4)

来自Keras source code

  

参数

    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