问题标签 [mini-batch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - 使用多项式基函数进行回归时,小批量梯度下降不起作用
我正在尝试y = sin(x)
使用小批量梯度下降法实现函数的线性回归。然而,损失并没有像预期的那样下降,而是迅速超出边界并变为nan
,导致回归失败。
下面是我的代码和解释。
导入库:
定义多项式基函数:
从 x 和系数预测,M 是使用的维度:
计算预测和预期之间的误差:
定义一个随机选择数据的方法,实现 MBGD 方法:
生成训练数据并应用 MBGD 方法:
但是,当运行上面的代码时,输出是一个列表nan
:
如果在迭代中打印出前几个gradient
,它们类似于以下内容:
这表明梯度非常不稳定,并且上下波动很大。
这个结果让我很困惑,因为如果在其他超参数不变的情况下使用不同的基函数,例如高斯基函数或 Sigmoidal 基函数,这里的 MBGD 方法可以产生很好的结果。我们只需要做一个小的改动predict()
:
结果要好得多:
我尝试过降低学习率等方法,但没有任何区别。
有人可以对此提出任何建议吗?我想知道这是代码实现问题,基本功能问题还是其他问题。
python - 小批量反向传播澄清
阅读了很多文章,现在我脑筋急转弯,需要对 mini batch 的概念有一个全新的认识。我是机器学习的新手,如果我的过程是否正确,我将不胜感激。这是我的前提:
我有一个包含 355 个特征和 8 个类输出的数据集。共有12200条数据。这是我的神经网络的粗略可视化:
我决定隐藏层 1 使用 181 个神经元,隐藏层 2 使用 96 个神经元。我对隐藏层使用 ReLu 激活,对输出层使用 Logistic。
为了做小批量,我将批量大小设置为 8。所以我总共有 1525 个批次,每批次有 8 个数据集。这是我的步骤:
- 获取第一批数据(8 组 355 个输入和 8 个输出)。
- 批次的前向传播。
- 获取错误并计算误差平方和。对于平方和,我首先对批次的误差进行平均,使用公式 SumError = (1/8)*sum(error^2)
- 批次的反向传播
- 获取反向传播后权重值的平均值。
- 使用新的权重作为下一批的权重。
- 获取下一批数据(8 组 355 个输入和 8 个输出)。
- 使用新的权重集重复 2-7。
- 当所有批次完成后,获取 SumError 的平均值以获得每个时期的平方和。
- 重复 1-9 直到每个 epoch 的 SumError 很小。
- 获取用于验证的最终权重
这就是我的小批量的过程。这个对吗?我的意思是,对于权重,我是使用每批之后计算的权重作为下一批的输入权重,还是先收集所有权重(起始权重将用于所有批次),然后平均所有批次的重量?然后使用平均权重作为下一个 epoch 的输入?
tensorflow - 如何在 gpflow 中使用带有非变分 GPR 的小批量?
我试图调整本文档中的说明以使用小批量来训练 GPR 模型,但我没有尝试过任何工作。我无法将批处理迭代器提供给 training_loss_closure 方法,也无法将批处理迭代器用于模型的数据属性。有没有办法在 gpflow 中使用具有非变分模型(如 GPR 或 SGPR)的小批量?
python - 训练卷积神经网络时如何平衡keras上的小批量?
我正在训练图像上的卷积神经网络(大小为 299、299、3)。图像可以有标签:0、1 或 2(多类分类),这 3 个类非常不平衡。为了改进训练阶段,我想确保每个 minibatch 包含所有三个类。我怎样才能做到这一点?
我正在使用 flow_from_dataframe 将图像传递给神经网络。
spark-streaming - Databricks Autoloader 卡住,无法传递到下一批
我每 5 分钟安排一次简单的工作。基本上它监听存储帐户上的云文件并将它们写入增量表,非常简单。代码是这样的:
有时有新文件,有时没有。在 40-60 个批次之后,它会卡在一个特定的批次 ID 上,就好像文件夹中没有新文件一样。如果我手动运行脚本,我会得到相同的结果:它指向最后一个实际处理的批次。
但是如果我只运行 readStream 部分 - 它会正确读取整个文件列表(并启动一个新的 batchId: 0 )。最奇怪的部分是:我完全不知道是什么原因造成的,以及为什么需要大约 40-60 批才能得到这种错误。任何人都可以帮忙吗?或者给我一些建议?我正在考虑使用 ForeachBatch() 来附加新数据。或使用触发器.trigger(continuous='5 minutes')
我是 AutoLoader 的新手
太感谢了!
python - 如何在 Python 中同时实现批量训练?
作为整个机器学习领域的初学者,我决定尝试使用 numpy 从头开始实现卷积神经网络。
我已经完成了图层和训练算法,一切正常。
我目前正在尝试实现一个小批量训练算法。我可能错了,但我在某处听说小批量计算都是同时发生的。目前我只是一个一个地计算每个小批量的梯度下降,然后通过这些计算的总和来更新可训练的参数。
如果可能的话,我怎样才能同时计算批次而不是遍历整个批次?我的模型的输入是形状为 (height, width, channels) 的 3d 数组我可以给出一个 (height, width, channels) 的 3d 数组作为输入,其中通道中的每个元素都是批次中的一个图像(意思是 batch_size = = 频道)?
** 辅助函数 **