1

对于我在 Keras 中实现的前馈神经网络中的输入,我只是想检查我的理解是否正确。

[[ 25.26000023  26.37000084  24.67000008  23.30999947]
[ 26.37000084  24.67000008  23.30999947  21.36000061]
[ 24.67000008  23.30999947  21.36000061  19.77000046]...]

所以在上面的数据中,它是一个数组中 4 个输入的时间窗口。我的输入层是

model.add(Dense(4, input_dim=4, activation='sigmoid')) 

model.fit(trainX, trainY, nb_epoch=10000,verbose=2,batch_size=4)

batch_size 是 4,理论上当我调用 fit 函数时,该函数会遍历每个 nb_epoch 中的所有这些输入吗?batch_size 是否需要为 4 才能使这个时间窗口起作用?

谢谢约翰

4

2 回答 2

1

让我用一个例子来解释一下:

当您有 32 个训练示例并且您使用 4 的model.fit a 调用时batch_size,神经网络将一次显示 4 个示例,但一个 epoch 仍将定义为对所有 32 个示例进行一次完整的遍历。因此,在这种情况下,网络将一次通过 4 个示例,并且至少在理论上将调用前向传递(和后向传递)32 / 4 = 8 次。

在极端情况下,当您batch_size为 1 时,这就是普通的旧随机梯度下降。当你batch_size大于 1 时,它被称为批量梯度下降。

于 2016-09-08T16:51:17.847 回答
1

batch_size 是 4,理论上当我调用 fit 函数时,该函数会遍历每个 nb_epoch 中的所有这些输入吗?

是的,每个时期都是对所有训练样本的迭代

batch_size 是否需要为 4 才能使这个时间窗口起作用?

不,这些是完全不相关的事情。批处理只是训练数据的一个子集,用于计算成本函数真实梯度的近似值。更大的批次 - 更接近真实梯度(和原始梯度下降),但训练变得更慢。更接近 1 - 它变得越来越随机、嘈杂的近似(并且更接近随机梯度下降)。您匹配 batch_size 和数据维度的事实只是一个奇怪的巧合,没有任何意义。

让我把它放在更一般的设置中,你在梯度下降中使用加性损失函数(神经网络通常使用)所做的事情是违背梯度,即

grad_theta 1/N SUM_i=1^N loss(x_i, pred(x_i), y_i|theta) =  
 = 1/N SUM_i=1^N grad_theta loss(x_i, pred(x_i), y_i|theta)

与 相比,loss您的(预测)的损失函数在哪里?predy_i

在基于批处理的场景中(粗略的想法)是您不需要查看所有示例,而是需要一些严格的子集,例如batch = {(x_1, y_1), (x_5, y_5), (x_89, y_89) ... }并使用形式梯度的近似值

1/|batch| SUM_(x_i, y_i) in batch: grad_theta loss(x_i, pred(x_i), y_i|theta)

如您所见,这与x_i居住空间没有任何关系,因此与数据的维度无关。

于 2016-09-08T17:48:01.563 回答