我是 Keras 的新手,需要您的帮助。
我正在 Keras 中训练一个神经网络,我的损失函数是平方差 b/w 网络的输出和目标值。
我想使用梯度下降来优化它。经过网上的一些链接,我了解到一般使用的梯度下降有 3 种类型:
- 单样本梯度下降:这里,每次迭代只从一个样本计算梯度——>梯度可能是有噪声的。
- 批量梯度下降:这里,梯度是从数据集中所有样本计算的梯度的平均值 --> 梯度更通用,但对于大型数据集来说难以处理。
- Mini-batch 梯度下降:类似于 Batch GD。不是使用整个数据集,而是只使用少数样本(由 batch_size 确定)来计算每次迭代中的梯度 --> 噪音不是很大,计算上也很容易处理 --> 两全其美。
问题:
- 我想在 Keras 中执行小批量梯度下降。我怎样才能做到这一点?我应该使用 SGD 优化器吗?
如果要使用SGD,如何设置batch_size?SGD 函数似乎没有设置 batch_size 的参数。
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
Keras 的 model.fit() 中有一个 batch_size 参数。
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
这与小批量梯度下降中的批量大小相同吗?如果不是,那么对一批输入进行训练究竟意味着什么?这是否意味着'batch_size'没有。线程并行运行并并行更新模型权重?
如果有帮助,这是我到目前为止编写的 python 代码片段。