首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CNTK中动量设置的困惑

CNTK中动量设置的困惑
EN

Stack Overflow用户
提问于 2017-09-16 01:30:07
回答 1查看 297关注 0票数 1

我非常困惑在cntk中动量是如何工作的,我从文档中看到了两种方式,1.动量作为时间常数

#对所有样本m= momentum_as_time_constant_schedule( 1100 )使用固定动量为1100。

我把动量值设定在哪里?这个固定动量的价值是什么?

  1. “正常方式”,即:我理解的方式

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)

另一种传递动量的方法,但只有一张单子

有人能帮我理解一下吗?

EN

回答 1

Stack Overflow用户

发布于 2017-09-18 21:36:41

一般情况下,请参阅我们的如何使用学习者手册以获得详细的解释。以下是与你的问题有关的部分:

  1. momentum_as_time_constant_schedule是一个遗留的API,时间常数和动量衰减因子之间的关系是。
    • momentum = exp(-minibatch_size / time_constant)
    • time_constant = minibatch_size / log (1 / momentum)

请参阅手册中的详细说明及其来源。还可以看到时间常数上的wiki页面:维基百科链接

  1. C.adam(parameters=res.parameters,lr=0.4,momentum=0.9,variance_momentum=0.9,minibatch_size=32)是一种方便的说法: lr = C.learning_parameter_schedule(0.4,minibatch_size = 32)动量= C.momentum_schedule(0.9,minibatch_size = 32) var_momentum = C.momentum_schedule(0.9,minibatch_size = 32) C.adam(prameters=res.parameters,lr = lr,动量=动量,var_momentum = var_momentum,minibatch_size = 32)
  2. 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个样本。
  • 通常,对于list [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作为特殊初始化)。

有关详细说明,请参见日程安排

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46249242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档