2017-01-29 10 views
0

Я изо всех сил пытаюсь понять символические нюансы API MXNet в Julia. Я видел пример в MXNet документации, которая имеет следующую строку:Запросы относительно Symbolic API в MXNet в Julia

act1 = mx.Activation(data = fc1, name=:relu1, act_type=:relu) 

Почему act_type присвоен символ :relu.?

:relu функция указатель? Если нет, то где мы назначим значение значению :relu? Почему данным не присвоен символ? Почему имя назначается символом, а не строкой?

ответ

1

Символ является допустимым значением для переменной типа «Символ». Я предполагаю, что внутри есть инструкция стиля switch, которая применяет конкретную подпрограмму в зависимости от переданного символа или, как вы сказали, сам символ используется для вызова определенной функции. Тот факт, что это символ, а не строка, по-видимому, просто вопрос дизайна; нет ничего, что помешало бы определить такую ​​функцию, как принимать строковый аргумент, а затем использовать эту строку для вызова функции.

Обратите внимание, что символ не совпадает с «функциональным дескриптором» (который, как я думаю, вы смешиваете с ним). Другими словами, нет, вы не передаете «указатель функции» в качестве аргумента с этим синтаксисом.

Данным не присвоен символ, поскольку предположительно вы должны передавать фактические данные в качестве первого аргумента при вызове функции.

+0

Когда вы говорите оператор стиля switch, который выполняется в зависимости от переданного символа - означает ли это, что: символ relu может быть проверен для какого-либо имени. typeof (: relu) даст результат -Symbol. Итак, как мы можем проверить, какой тип символа был принят –

+0

да. это может быть нечто простое, как 'if name ==: relu; callrelu(); elseif name ==: expo; callexpo(); end'. Сказав это, глядя на исходный код, библиотека MXNet, похоже, основана на python. Символы иногда используются в PyCall для вызова соответствующих членов модуля python. например если в python у вас есть 'mx.relu', в julia, который обычно становится' mx [: relu] '. Более чем вероятно, что это то, что происходит здесь, и 'relu' является членом модуля mx' python или что-то в этом роде. –

+0

, как я подозревал, это синтаксис PyCall. Посмотрите на эквивалентную документацию на python. (например, установите mxnet с помощью pip, затем в python выполните 'import mxnet', затем' help (mxnet.symbol.Activation) '). Обратите внимание, что (пока модуль python установлен) вы можете получить одну и ту же информацию через julia, выполнив «использование PyCall», «mxnet = pyimport (« mxnet »);', 'pybuiltin (« help ») (mxnet [ : symbol] [: Activation]) ' –