2017-04-06 3 views
0

J'essaie d'utiliser QNMinimizer de la bibliothèque PNL de Stanford et j'ai des problèmes avec les paramètres dont j'ai besoin pour que qn.minimize fonctionne correctement.Comment créer une fonction diffFunction en Java pour l'utiliser dans QNMinimizer?

QNMinimzer qn = new QNMinimizer(10, true) 
qn.minimize(null, 1e-5, new double[] {0,0,0}, 400) 

je dois mettre un objet de type diffFunction où le « nul » est, mais ne suis pas sûr comment créer/mettre en œuvre un. J'ai une méthode qui utilise la descente de gradient et que vous voulez intégrer dans l'objet diffFunction.

Répondre

0

Vous devriez simplement pouvoir implémenter l'interface DiffFunction - Vraiment, je recommanderais une fois que vous aurez compris ce qui se passe, simplement parce que c'est plus efficace et avec de jolies fonctions utilitaires (par exemple, un vérificateur de dégradé).

À un niveau élevé, pour tout vecteur d'entrée x \in R^k (représenté comme un double vecteur de longueur k), vous devez fournir deux valeurs: la valeur de votre fonction y = f_{\theta}(x) \in R, et un gradient \frac{d}{d\theta}f_\theta(x) \in R^k, sortie comme un double vecteur longueur k. La dimension k est définie dans Function#domainDimension (une interface supérieure de DiffFunction).

La valeur y est définie dans Function#valueAt. Le gradient est défini par DiffFunction#derivativeAt.

Si la descente de gradient est déjà implémentée, la valeur y sera la valeur de la perte. Le gradient sera le gradient en descente de gradient. Si vous avez une descente en gradient stochastique plutôt qu'une descente en gradient de lot. la valeur y est la somme des pertes sur votre ensemble de données et de la même avec le dégradé.