在Keras中将numpy数组作为输入传递给input时的形状



我正在读一本关于深度学习的书,我目前正在学习其中的Keras功能API。在上下文中:

"输入层采用一个shape参数,该参数是一个元组,用于指示输入数据的维度。当输入数据是一维的时,例如对于多层感知器,形状必须明确为在在训练网络时分割数据。因此,形状元组总是被定义的对于挂起的最后一个维度(2,(,这是您必须在中定义一维元组的方式Python,例如:;

我不太理解形状部分——为什么第二个参数为空?保持空是什么意思?这并不意味着它可以有任何形式,但这里发生了什么?此外,关于小批量大小——在NN和小批量中一次处理的不仅仅是一个数据——我们在用我们的模型评估每一批数据后更新学习率(如果使用sgd(。那么,为什么我们需要改变输入形状的尺寸来适应这种情况呢?-一次不应该只运行一个数据实例吗?

如果数据是二维的(例如灰度图像(,则numpy数组的形状将为(height, width)。然而,对于一维输入,您可能会认为它的形状只是length。当你说(length,)时,不同之处在于你不是一个整数,而是一个有一个元素的元组。

关于批量的想法是一次处理多个,以加快训练速度。我不确定这在内部是如何工作的,但通常情况下,一批中实际上有多个实例。我相信梯度下降不会更新每个实例之间的权重,而是只在每个批次之后更新——这意味着批次中的每个实例都可以并行计算。

我猜他们为什么指出形状是元组是相关的,是因为当形状只是一个整数时,没有特殊的情况处理。例如,您可以在元组的条目上循环,但不能在整数上循环。

还要注意,numpy数组的形状也是一个元组:

>>> import numpy as np
>>> np.array([1,2,3]).shape
(3,)

因此,如果您想直接使用array.shape,则可以直接使用。

从技术上讲,您可以使用批处理,但将批处理大小设置为1。不过,这可能会让人感到困惑,因为如果在某个地方使用squeeze,它也会去掉批处理维度。

相关内容

最新更新