CNTK C ++ API中Function :: Forward和Trainer :: TrainMinibatch之间的区别

时间:2017-12-26 19:40:47

标签: c++ model cntk

我正在尝试从CNTKLibrary.h逆向工程CNTK的C ++ API(因为没有官方文档)

我建立了一个RNN网络(主要通过遵循单元测试源代码)并且它似乎正常工作(至少现在没有编译或运行时错误!!!)

在单元测试源代码中,我看到他们使用Function :: Forward和Function :: Backward来计算“trainingLoss”和“predection”,但是通过以下Python实例,我发现我可以使用相关学习器优化器制作“Trainer” (FSAdaFradLearner),然后在该poinetr上调用“TrainMinibatch”。

现在我的问题是,哪一个是训练模型的正确方法?

1 个答案:

答案 0 :(得分:2)

有不同的抽象级别来实现同样的目标。

Trainer是一个包装/便利类,可以为你记住一些事情,比如根节点和学习者,并提供方便函数TrainMinibatch(),它实际上是{{Forward()的序列。 1}},Backward()learner.Update()

C ++ API与Python API非常相似。实际上,大多数Python API函数和类只是围绕相应C ++函数和类的包装器。因此,由于语言和类型 - 系统差异,方法签名不匹配100%,因此Python文档中描述的任何逻辑都应直接应用于C ++。

在典型的使用案例中,调用TrainMinibatch()将在此处结束:[https://github.com/Microsoft/CNTK/blob/94e6582d2f63ce3bb048b9da01679abeacda877f/Source/CNTKv2LibraryDll/Trainer.cpp#L193

调用ExecuteForwardBackward(),调用Forward()Backward()。您可以将其用作如何调用这些函数的示例。