J'essaie d'écrire le calcul de l'indice de Gini comme une fonction de coût de flux tensoriel. Indice de Gini est: https://en.wikipedia.org/wiki/Gini_coefficientCalcul de l'indice de Gini dans tensorflow
une solution numpy serait
def ginic(actual, pred):
n = len(actual)
a_s = actual[np.argsort(pred)]
a_c = a_s.cumsum()
giniSum = a_c.sum()/a_s.sum() - (n + 1)/2.0
return giniSum/n
Quelqu'un peut-il me aider à comprendre comment faire cela dans tf (par exemple, dans tf il n'y a pas argsort qui peut faire partie d'un fonction qui est différenciée, AFAIK)
Ok, cela semble bon, mais lorsqu'il est passé à un NN comme une perte fonctionner, il retourne une erreur pour la ligne : ---> 14 n = int (actual.get_shape() [- 1]) erreur: TypeError: \ __ int \ __ non-int retourné (type NoneType) il fonctionne comme prévu si je cours juste une session – Ilya
Je pense que cela se produit parce que la forme de votre espace réservé \ tensor pour 'effective' est' (None,) ', ce qui signifie qu'elle n'a pas de longueur prédéfinie, donc' n' ne peut pas être calculé au moment de construction graphique. Dans ce cas, ce que vous pouvez faire est juste de passer 'n' (la longueur des tableaux) comme argument supplémentaire à la fonction, au lieu de le calculer. – Lior
Ok, je n'ai pas pu résoudre ce problème (j'ai essayé de donner la valeur par défaut de n, mais cela ne résout pas le problème). J'ai fait une nouvelle question pour ce problème particulier https://stackoverflow.com/questions/46674293/custom-loss-function-in-keras-how-to-deal-with-placeholders Encore une fois, merci d'avoir écrit le fonctionne en TF! – Ilya