J'ai les méthodes suivantes:
Matrix& relu(float threshold, Matrix& M) Matrix& softmax(Matrix& M)
3 Réponses :
Techniquement, vous pouvez indiquer les deux fonctions avec n'importe quel pointeur de fonction. Vous aurez juste besoin de convertir le type explicitement. Bien sûr, vous ne pourrez pas appeler à travers le pointeur si le type ne correspond pas. P>
Une autre option consiste à stocker le pointeur de la fonction dans un type d'emballage d'effacement tel que Donc, vous avez des moyens de pointer vers les différentes fonctions, mais une autre question est de savoir si cela est de quelque sorte utile. p> std :: n'importe quel code> ou
std :: variante code>, qui fournit un mécanicien de visite qui peut être utile. p>
@eroika Vous n'avez pas besoin d'utiliser void * code>. Vous pouvez simplement choisir un pointeur de fonction, car tout pointeur à fonction peut être jeté sur un pointeur sur n'importe quel autre type de fonction et peut être utilisé après la mise en place du type de pointeur de fonction d'origine.
@Raymondchen Point intéressant, n'a pas pensé à cela. J'ai simplifié la réponse.
Vous pouvez utiliser une fiche générique wrapper Votre fonction d'activation std :: Fonction < / code>
:
relu code> et
softmax code> devrait probablement accepter une référence à un const Vector et retourne un nouveau vecteur de valeur. p> p>
J'aurais utilisé BID au lieu d'envelopper la fonction relu. (Plus précisément, BIND_FRONT est beaucoup plus clair).
@ M.WORSHIPME C ++ 11 Lambdas sont plus efficaces que Bind code>. Il y a peu de raisons d'utiliser
lid code> en C ++ 11 et aucune raison du tout en C ++ 14.
Il y a une solution de temps d'exécution, qui serait un peu plus lente et où vous devriez vérifier quel type il est et il y a aussi une version de la compilation, Ce qui est plus rapide et plus sûr d'utiliser, car il ne manquera pas au moment de l'exécution, mais générer une erreur de compilateur, mais est un peu plus inflexible pour votre code: p>
Cela ressemble à un problème xy. Qu'essayez-vous de résoudre? Nous pouvons probablement vous donner une meilleure solution.
Comment appeleriez-vous la nouvelle fonction avec différents paramètres?
Une union de deux pointeurs de fonction suffit-il? De toute évidence, vous seriez capable d'utiliser un seul d'entre eux à la fois.