CNTK C++ API 中 Function::Forward 和 Trainer::TrainMinibatch 的区别
Difference between Function::Forward and Trainer::TrainMinibatch in CNTK C++ API
我正在尝试从 CNTKLibrary.h
为 CNTK(因为没有官方文档)逆向工程 C++ API
我制作了一个 RNN 网络(主要是通过遵循单元测试源代码)并且它似乎工作正常(至少现在没有编译或运行时错误!!!)
在单元测试源代码中,我看到他们使用 Function::Forward 和 Function::Backward 来计算 "trainingLoss" 和 "predection",但也遵循 Python 示例我发现我可以使用关联的学习器优化器 (FSAdaFradLearner) 创建 "Trainer",然后在那个 poinetr 上调用 "TrainMinibatch"。
现在我的问题是,哪一个是训练模型的正确方法?
实现同一件事有不同的抽象级别。
Trainer
是一个wrapper/convenienceclass,为你记住一些东西,比如根节点和学习者,并提供方便的功能TrainMinibatch()
,这实际上是 Forward()
、Backward()
和 learner.Update()
.
的序列
C++ API 与 Python API 非常相似。事实上,大多数 Python API 函数和 classes 只是相应的 C++ 函数和 classes 的包装器。因此,尽管由于语言和类型系统的差异,方法签名并非 100% 匹配,但 Python 文档中描述的任何逻辑都应直接适用于 C++。
在典型用例中,调用 TrainMinibatch()
将在此处结束:[https://github.com/Microsoft/CNTK/blob/94e6582d2f63ce3bb048b9da01679abeacda877f/Source/CNTKv2LibraryDll/Trainer.cpp#L193
它调用 ExecuteForwardBackward()
,它调用 Forward()
和 Backward()
。您可以将其用作如何调用这些函数的示例。
我正在尝试从 CNTKLibrary.h
为 CNTK(因为没有官方文档)逆向工程 C++ API我制作了一个 RNN 网络(主要是通过遵循单元测试源代码)并且它似乎工作正常(至少现在没有编译或运行时错误!!!)
在单元测试源代码中,我看到他们使用 Function::Forward 和 Function::Backward 来计算 "trainingLoss" 和 "predection",但也遵循 Python 示例我发现我可以使用关联的学习器优化器 (FSAdaFradLearner) 创建 "Trainer",然后在那个 poinetr 上调用 "TrainMinibatch"。
现在我的问题是,哪一个是训练模型的正确方法?
实现同一件事有不同的抽象级别。
Trainer
是一个wrapper/convenienceclass,为你记住一些东西,比如根节点和学习者,并提供方便的功能TrainMinibatch()
,这实际上是 Forward()
、Backward()
和 learner.Update()
.
C++ API 与 Python API 非常相似。事实上,大多数 Python API 函数和 classes 只是相应的 C++ 函数和 classes 的包装器。因此,尽管由于语言和类型系统的差异,方法签名并非 100% 匹配,但 Python 文档中描述的任何逻辑都应直接适用于 C++。
在典型用例中,调用 TrainMinibatch()
将在此处结束:[https://github.com/Microsoft/CNTK/blob/94e6582d2f63ce3bb048b9da01679abeacda877f/Source/CNTKv2LibraryDll/Trainer.cpp#L193
它调用 ExecuteForwardBackward()
,它调用 Forward()
和 Backward()
。您可以将其用作如何调用这些函数的示例。