我目前正在使用Spark 2.3.0运行sparkling-water 2.3.1。我通过查看链接到H2O的变化量g找到底层这库的文档。所以很明显它使用了H2O 3.18。
通过查看DNN,我注意到缺少一个batch_size参数,但是它提供了一个实际上没有文档化的mini_batch_size参数。我找到的关于这个参数的唯一文档是这里,它引用了H2O 2.4,并且我假设它仍然适用于我正在使用的版本(我不知道这个假设是否正确)。
小批量 每次迭代要处理的训练数据行数。请注意,与此参数无关,每一行都会立即使用(在线)随机梯度下降更新模型。小批量大小控制分布式环境中节点之间的同步周期,以及评分和模型取消发生的频率。例如,如果在运行在4个节点上的H2O上将小批处理设置为10,000,那么每个节点将在每次迭代中处理2,500行,从它们的本地数据随机抽样。然后,在节点之间进行模型平均,并进行评分(取决于评分间隔和占空比)。每迭代一次的特殊值为0,每次迭代处理最大数据量的值为-1。如果启用了“复制训练数据”,则将在N个节点上每次迭代训练N个历元,否则为一个历元。
由此,我解释了批处理大小实际上是固定为1,因为它总是执行在线渐变下降。
我还开始深入研究H2O的源代码,以查看它的默认值,并且默认参数包含在这个类中。
来自第1694行
// stochastic gradient descent: mini-batch size = 1
// batch gradient descent: mini-batch size = # training rows
public int _mini_batch_size = 1;因此,从评论中看,它似乎并没有实际执行在线梯度下降,但它似乎实际上表现为批处理大小。如果我们假设H2O 2.4文档仍然适用,那么1的值是没有意义的。
此外,在第2173项中,它设置用户给定的参数:
if (fromParms._mini_batch_size > 1) {
Log.warn("_mini_batch_size", "Only mini-batch size = 1 is supported right now.");
toParms._mini_batch_size = 1;实际上,我刚刚对源代码进行了快速锁定,可能遗漏了一些东西,但我真的无法理解mini_batch_size参数是如何工作的,以及它与批处理大小有什么关系。有人能解释一下这件事吗?
发布于 2018-10-04 21:25:41
这个参数实际上不应该被用户使用,并且有一个票据来隐藏它,这里。现在,请将mini_batch_size保留为1(默认值),这样您就不会碰到任何警告或错误。
https://stackoverflow.com/questions/52538201
复制相似问题