2017-01-21 30 views
0

我在调用CNTK中的trainer.restore_from_checkpoint时遇到以下异常。'此功能与从CNTK中的检查点恢复的功能不同(同构)

'此功能与从检查点恢复的功能不等效(同构)。

我的还原代码出现在下面。这些与创建培训师的结构相同,并且如in this document所述通过trainer.save_checkpoint("trainer.dnn")保存trainer.dnn

def evaluate(reader, model): 
    criterion = create_criterion_function(model) 
    criterion.replace_placeholders({criterion.placeholders[0]: Input(input_dim), 
            criterion.placeholders[1]: Input(label_dim)}) 

    # training config 
    epoch_size = 34 
    minibatch_size = 17 

    # LR schedule over epochs 
    lr_per_sample = [0.003]*4+[0.0015]*24+[0.0003] 
    lr_per_minibatch = [x * minibatch_size for x in lr_per_sample] 
    lr_schedule = learning_rate_schedule(lr_per_minibatch, UnitType.minibatch, epoch_size) 

    # Momentum 
    momentum_as_time_constant = momentum_as_time_constant_schedule(70) 

    learner = adam_sgd(criterion.parameters, 
         lr=lr_schedule, momentum=momentum_as_time_constant, 
         low_memory=True, 
         gradient_clipping_threshold_per_sample=15, gradient_clipping_with_truncation=True) 

    trainer = Trainer(model, criterion.outputs[0], criterion.outputs[1], learner) 
    trainer.restore_from_checkpoint("trainer.dnn") 

def do_test(): 
    reader = create_reader('Test.txt', is_training=False) 
    model = create_model() 
    evaluate(reader, model) 

do_test() 

回答

0

检查点有两种方法。

  1. 模型检查指向:仅检查模型,然后当您恢复模型时,创建一个新的培训师。

  2. 教练检查指示:检查点将保存模型的教练和标准功能。从检查点恢复训练员。

可能会出现此错误,因为您将标准函数传递给培训师,然后从具有不同功能的先前检查点恢复。

一些相关代码here

+0

使用从全局准则函数和模型,但得到相同的错误。另外,在我的问题中提到的代码中,我创建了与存储的函数相同的标准函数。你能否推荐任何能以某种方式正常工作的示例代码,存储教练,并在经过一些计算后,在任意点恢复教练? – OmG

+0

这里有一些用户restore_from_checkpoint的代码。 https://github.com/Microsoft/CNTK/blob/3ab246855bff036eefe61d30658be5112567f492/bindings/python/cntk/tests/distributed_test.py –

+0

这个例子很糟糕,因为它不适用!在一行保存检查点后,恢复了检查点,这不是适用的情况!我以前一直这样做,它的工作原理,但不适用!在大多数情况下,我想在需要时恢复检查点,而不是在保存检查点之后! – OmG