2017-09-16 48 views
0

設置我超級迷糊中cntk 勢頭工作從文檔我看看到底怎麼會有兩種方式 1.勢頭,時間常數混淆勢頭CNTK

#使用的固定勢頭1100所有樣本 m = momentum_as_time_constant_schedule(1100)

我在哪裏設置動量值? 這個固定動量的價值是什麼?

  • '正常方式',即:一個我明白
  • C.adam(參數= res.parameters,LR = 0.4,動量= 0.9,variance_momentum = 0.9,minibatch_size = 32)

    我看到我們可以設置直接參數,但不知何故還有

    動量= momentum_schedule(0.9)

    ,並變得更加令人困惑了我,我看到這種事情在CNTK

    C.momentum_sgd(參數=資源的單元測試。參數,LR = [0.4,0.1,0.001],動量= [0.9], minibatch_size = 32,epoch_size = 512)

    又一方式傳遞米網膜,但與單一列表

    有人可以幫我理解這一點嗎?

    回答

    3

    一般情況下,請參閱我們的手冊how to use learners的詳細說明。複製涉及您的問題下面的部分:

    1. momentum_as_time_constant_schedule是一個傳統的API,一時間之間恆定的勢頭衰減因子的關係
      • momentum = exp(-minibatch_size/time_constant)
      • time_constant = minibatch_size/log (1/momentum)

    有關詳細說明及其來源,請參閱手冊。另請參閱時間常數維基頁面:wikipedia link

    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) 
      
      momentum = 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, momentum = momentum, 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) 
      
      momentum = C.momentum_schedule([0.9], minibatch_size = 32, epoch_size=512) 
      
      C.momentum_sgd(parameters=res.parameters, lr = lr, momentum = momentum, minibatch_size = 32, epoch_size=512) 
      

    具有速率的列表,而不是一個單一的的含義數量是它是一個學習速率(動量)的時間表,而不是單一的學習速率(或動量):不同的學習速率(動量,變量動量)將應用於不同的樣本:

    • 在該示例中,0.4將應用於前512個採樣;將從第513個樣本到第1024個樣本應用0.1;將從第1025個樣本到第1536個樣本應用0.001
    • 通常,列表[p_1, p_2, .., p_n],列表中的第i個參數p_i用作從(epoch_size * (i-1) + 1)個樣本到(epoch_size * i)個樣本的值。如果列表包含一對,即[(num_epoch_1, p_1), (num_epoch_n, p_2), .., (num_epoch_n, p_n)],則第i個參數用作從第(epoch_size * (num_epoch_0 + ... + num_epoch_2 + ... + num_epoch_(i-1) + 1)個樣本到第(epoch_size * num_epoch_i)個樣本(以num_epoch_0 = 0作爲特殊初始化)的值。

    查看learning_parameter_schedule的詳細解釋。