Это действительно зависит от того, как выглядит ваш символьный график.Я предполагаю, что вы используете MXNet с Python ( Документация Python ).Там вы можете использовать библиотеку символов MXNet или библиотеку Gluon.
Теперь вы спрашивали, можно ли проверить код, и, да, вы можете найти его на GitHub .Папка python
содержит интерфейс Python, а src
содержит все источники MXNet.То, что происходит в forward
, в конечном итоге определяется механизмом выполнения MXNet, который отслеживает зависимости ввода / вывода операторов и уровней нейронной сети, распределяет память на разных устройствах (CPU, GPU). Существует общая документация по архитектуре для этого .
Полагаю, вас интересует, что делает каждая операция, например argmax
(сокращение), tanh
(унарная математическая операция) или convolution
(сложная работа нейронной сети).Это вы можете найти в папке оператора MXNet .Это требует целой документации само по себе, и здесь есть специальный форум для спецификаций MXNet здесь , но я дам краткую ориентацию:
- Каждая операция в (символическом) графе выполнениятребуется определенная операция
forward
и backward
.Он также должен определить свою выходную форму, чтобы он мог быть связан с другими операциями.Если этому оператору требуются весовые коэффициенты, ему необходимо определить объем требуемой памяти, чтобы MXNet мог выделить его. - Для каждой операции требуется несколько реализаций для: а) ЦП, б) графического процессора (CUDA), в) оболочки вокруг cuDNN
- Все унарные математические операции следуют одному и тому же шаблону, поэтому все они определены одинаково в mshadow_op.h (например,
relu
).
Thisэто все, что я могу вам сказать, основываясь на вашем довольно широком вопросе.