对于我在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才能使此时间窗口有效吗?
感谢约翰
答案 0 :(得分:1)
让我用一个例子解释一下:
如果你有32个训练样例并且你用model.fit
来调用batch_size
,那么神经网络将一次呈现4个例子,但是一个时期仍然被定义为一个完整的通过所有32个例子。因此,在这种情况下,网络将一次通过4个示例,理论上至少会调用前向传递(和后向传递)32/4 = 8次。
在batch_size
为1的极端情况下,这是普通的随机梯度下降。当您的batch_size
大于1时,它会被称为批量渐变下降。
答案 1 :(得分: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
相比,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
所居住的空间无关,因此与数据的维度无关。