2017-01-29 1 views
0

J'ai du mal à comprendre les nuances symboliques API de MXNet dans Julia. J'ai vu un exemple dans la documentation MXNet qui a la ligne suivante:Requêtes concernant l'API Symbolic dans MXNet dans Julia

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

Pourquoi act_type par le symbole :relu.?

Est-ce que :relu est un pointeur de fonction? Si non, alors où assignons-nous la valeur au symbole :relu? Pourquoi les données ne sont-elles pas affectées d'un symbole? Pourquoi le nom est-il affecté d'un symbole plutôt que d'une chaîne?

Répondre

1

Un symbole est une valeur valide pour une variable de type "Symbol". Ma conjecture est que intérieurement il ya une déclaration de style switch qui applique un sous-programme particulier en fonction du symbole passé, ou, comme vous l'avez dit, le symbole lui-même est utilisé pour appeler une fonction particulière. Le fait que ce soit un symbole plutôt qu'une chaîne est probablement juste une question de conception; il n'y a rien qui empêche de définir une telle fonction comme prendre un argument de chaîne et ensuite utiliser cette chaîne pour appeler une fonction. Notez qu'un symbole n'est pas la même chose qu'un "handle de fonction" (ce que je pense est ce que vous confondez avec). En d'autres termes, non, vous ne passez pas un "pointeur de fonction" comme argument avec cette syntaxe.

Un symbole ne figure pas dans les données car il est probable que vous êtes supposé transmettre des données réelles en tant que premier argument lors de l'appel de la fonction.

+0

Quand vous dites switch déclaration de style qui s'exécute en fonction du symbole passé - cela signifie-t-il que: le symbole relu peut être vérifié pour un nom. typeof (: relu) donnera le résultat -Symbol. Alors, comment pouvons-nous vérifier quel type de symbole a été passé –

+0

oui. cela peut être quelque chose d'aussi simple que 'if name ==: relu; callrelu(); elseif name ==: expo; callexpo(); fin ». Cela dit, en regardant le code source, la bibliothèque MXNet semble être basée sur python. Des symboles sont parfois utilisés dans PyCall pour appeler les membres respectifs d'un module python. par exemple. si en python vous avez 'mx.relu', en julia cela devient habituellement' mx [: relu] '. Il est plus que probable que c'est ce qui se passe ici, et 'relu' est un membre du module python' mx' ou quelque chose du genre. –

+0

comme je le soupçonnais, c'est la syntaxe PyCall. Regardez la documentation équivalente en python. (par exemple, installez mxnet en utilisant pip, puis en python faites 'import mxnet' puis' help (mxnet.symbol.Activation) '). Notez que (tant que le module python est installé) vous pouvez obtenir les mêmes informations via julia en utilisant 'using PyCall',' mxnet = pyimport ("mxnet"); ',' pybuiltin ("help") (mxnet [ : symbole] [: Activation]) ' –