前馈 - 神经网络 Keras
Feed Forward - Neural Networks Keras
对于我在 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 个输入的时间 window。我的输入层是
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 才能让 window 正常工作?
谢谢约翰
让我用一个例子来解释一下:
当您有 32 个训练示例并调用 model.fit
时 batch_size
为 4,神经网络将一次呈现 4 个示例,但一个 epoch 仍将定义为一次完整地通过所有 32 个示例。所以在这种情况下,网络将一次处理 4 个示例,并且至少从理论上讲,将调用正向传递(和反向传递)32 / 4 = 8 次。
在极端情况下,当您的 batch_size
为 1 时,这就是普通的旧式随机梯度下降法。当你的 batch_size
大于 1 时,它被称为批量梯度下降。
and batch_size is 4, in theory when I call the fit function will the function go over all these inputs in each nb_epoch?
是的,每个时期都是对所有个训练样本
的迭代
and does the batch_size need to be 4 in order for this time window to work?
不,这些是完全不相关的事情。 Batch 只是训练数据的一个子集,用于计算成本函数真实梯度的近似值。批次越大 - 越接近真实梯度(和原始 梯度下降),但训练速度变慢。接近 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
是 pred
(预测)与 y_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
所在的 space 没有任何关系,因此与数据的维度无关。
对于我在 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 个输入的时间 window。我的输入层是
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 才能让 window 正常工作?
谢谢约翰
让我用一个例子来解释一下:
当您有 32 个训练示例并调用 model.fit
时 batch_size
为 4,神经网络将一次呈现 4 个示例,但一个 epoch 仍将定义为一次完整地通过所有 32 个示例。所以在这种情况下,网络将一次处理 4 个示例,并且至少从理论上讲,将调用正向传递(和反向传递)32 / 4 = 8 次。
在极端情况下,当您的 batch_size
为 1 时,这就是普通的旧式随机梯度下降法。当你的 batch_size
大于 1 时,它被称为批量梯度下降。
and batch_size is 4, in theory when I call the fit function will the function go over all these inputs in each nb_epoch?
是的,每个时期都是对所有个训练样本
的迭代and does the batch_size need to be 4 in order for this time window to work?
不,这些是完全不相关的事情。 Batch 只是训练数据的一个子集,用于计算成本函数真实梯度的近似值。批次越大 - 越接近真实梯度(和原始 梯度下降),但训练速度变慢。接近 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
是 pred
(预测)与 y_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
所在的 space 没有任何关系,因此与数据的维度无关。