我非常困惑在cntk中动量是如何工作的,我从文档中看到了两种方式,1.动量作为时间常数
#对所有样本m= momentum_as_time_constant_schedule( 1100 )使用固定动量为1100。
我把动量值设定在哪里?这个固定动量的价值是什么?
C.adam(parameters=res.parameters,lr=0.4,momentum=0.9,variance_momentum=0.9,minibatch_size=32)
我知道我们可以直接设置参数,但不知怎么也有
动量= momentum_schedule(0.9)
更让我困惑的是,我在CNTK的单元测试中看到了这种情况。
momentum=0.9,C.momentum_sgd(parameters=res.parameters,lr=0.4,0.1,0.001,minibatch_size=32,epoch_size=512)
另一种传递动量的方法,但只有一张单子
有人能帮我理解一下吗?
发布于 2017-09-18 21:36:41
一般情况下,请参阅我们的如何使用学习者手册以获得详细的解释。以下是与你的问题有关的部分:
momentum_as_time_constant_schedule是一个遗留的API,时间常数和动量衰减因子之间的关系是。momentum = exp(-minibatch_size / time_constant)time_constant = minibatch_size / log (1 / momentum)
请参阅手册中的详细说明及其来源。还可以看到时间常数上的wiki页面:维基百科链接。
C.momentum_sgd(parameters=res.parameters, lr=[0.4, 0.1, 0.001], momentum=[0.9], minibatch_size=32, epoch_size=512)是一种方便的表达方式:
lr = C.learning_parameter_schedule(0.4,0.1,0.001,minibatch_size = 32,,epoch_size=512)动量= C.momentum_schedule(0.9,minibatch_size = 32,epoch_size=512) C.momentum_sgd(parameters=res.parameters,lr = lr,动量=动量,minibatch_size = 32,epoch_size=512)拥有一个速率列表而不是一个数字的含义是,它是一个学习速率(动量)时间表,而不是单个学习速率(或动量):不同的学习速率(动量、变量动量)将适用于不同的样本:
0.4将应用于前512个样本;0.1将从513个样本应用到1024个样本;0.001将从1025个样本应用到1536个样本。[p_1, p_2, .., p_n],列表中的第一个参数p_i被用作从(epoch_size * (i-1) + 1)-th示例到(epoch_size * i)-th示例的值。如果list包含对,即[(num_epoch_1, p_1), (num_epoch_n, p_2), .., (num_epoch_n, p_n)],则i-th参数用作从(epoch_size * (num_epoch_0 + ... + num_epoch_2 + ... + num_epoch_(i-1) + 1)-th示例到(epoch_size * num_epoch_i)-th示例的值(将num_epoch_0 = 0作为特殊初始化)。有关详细说明,请参见日程安排。
https://stackoverflow.com/questions/46249242
复制相似问题