модель — Разница между Function :: Forward и Trainer :: TrainMinibatch в CNTK C ++ API

Я пытаюсь восстановить C ++ API для CNTK (так как нет официальной документации) из CNTKLibrary.h

Я создал сеть RNN (в основном, следуя исходным кодам модульных тестов), и она работает (по крайней мере, пока нет ошибок компиляции или времени выполнения !!!)

В исходном коде модульного теста я вижу, что они использовали Function :: Forward и Function :: Backward для вычисления «trainingLoss» и «prection», но также, следуя примерам Python, я обнаружил, что могу создать «Trainer» со связанным оптимизатором ученика (FSAdaFradLearner) , а затем позвоните «TrainMinibatch» на этот poinetr.

Теперь мой вопрос: какой способ обучения модели является правильным?

0

Решение

Существуют разные уровни абстракции для достижения одного и того же.

Trainer является классом оболочки / удобства, который запоминает несколько вещей для вас, таких как корневой узел и ученик, и предоставляет функцию удобства TrainMinibatch(), которая фактически является последовательностью Forward(), Backward(), а также learner.Update(),

API C ++ очень похож на API Python. Фактически, большинство функций и классов Python API являются просто обертками вокруг соответствующих функций и классов C ++. Таким образом, хотя сигнатуры методов не совпадают на 100% из-за различий в языке и системе типов, любая логика, описанная в документации по Python, должна применяться непосредственно к C ++.

В типичных случаях использования вызова TrainMinibatch() в конечном итоге здесь: [https://github.com/Microsoft/CNTK/blob/94e6582d2f63ce3bb048b9da01679abeacda877f/Source/CNTKv2LibraryDll/Trainer.cpp#L193

Это вызывает ExecuteForwardBackward(), который вызывает Forward() а также Backward(), Вы можете использовать это как пример того, как вызывать эти функции.

2

Другие решения

Других решений пока нет …