Partage
  • Partager sur Facebook
  • Partager sur Twitter

comprendre le fonctionnement d'une méthode

la ligne : hits10 = (torch....

    28 juillet 2021 à 15:10:24

    svp, je veux comprendre une ligne d'une fonction !!!

    la fonction est comme suit:

    def RecEvaluate(model, g, features, users_eval, movies_eval, neg_sample_size):
        model.eval()
        with torch.no_grad():
            neg_movies_eval = data.neg_valid[users_eval].flatten()
            r, neg_r = model.est_rating(g, features, users_eval, movies_eval, neg_movies_eval)
            hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()
            print('HITS@10:{:.4f}'.format(np.mean(hits10)))
            return np.mean(hits10)

    et je veux comprendre cette ligne :

    hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()

    j'ai fait un essaie pour simplifier la comprehension :

    neg_r = torch.tensor([[1., 10. ,5., 1., 2., 4.],[0., 7., 8., 10., 6., 2.]])
    r = torch.tensor([[1., 9. ,5., 1., 2., 3.,], [0., 7., 6., 10., 4., 2.]])
    hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()
    print(hist10)
    print('HITS@10:{:.4f}'.format(np.mean(hits10)))

    et j'ai obtenu ce resultat:

    [ True  True]
    HITS@10:1.0000






    -
    Edité par Driss EL ALAOUI 28 juillet 2021 à 15:44:16

    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2021 à 18:14:40

      peut-être qu'avec la doc https://pytorch.org/docs/stable/generated/torch.sum.html et un peu de réflexion:

      Je dirais qu'on fait la comparaison des éléments torseurs neg_r et r , et que l'on somme du résultat (si neg_r > r alors True sinon False)

      donc on a [False + True + False + False + False +True],[False+False+True+False+True+False] => [ 2 2] (on 2 True à chaque fois donc 2*1=2

      Ensuite, on le compare à 10: si les valeurs sont inférieurs à 10, alors ça vaut True, donc on a [True True]; et comme True vaut 1, la moyenne de True+True (=2) vaut 1

      • Partager sur Facebook
      • Partager sur Twitter
        28 juillet 2021 à 20:33:22

        merci beaucoup, c'est très bien expliqué :)

        -
        Edité par Driss EL ALAOUI 28 juillet 2021 à 21:39:29

        • Partager sur Facebook
        • Partager sur Twitter
          29 juillet 2021 à 10:33:30

          j'espère juste que c'est ça ^^ mais en tout cas, ça m'a semblé cohérent
          • Partager sur Facebook
          • Partager sur Twitter
            31 juillet 2021 à 15:25:10

            excusez moi , mais j'ai essayé de verifier ce que vous m'avez dit, et j'ai changé mon exemple de test :

            neg_r = torch.tensor([[0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
            r = torch.tensor([[1, 9, 5, 1, 2, 3, 1, 0, 1, 1, 1, 1], [0, 7, 6, 10, 4, 2, 1, 0, 1, 1, 1, 1]])
            hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()
            print(hits10)
            print('HITS@10:{:.4f}'.format(np.mean(hits10)))

             et j'ai obtenu le même resultat !!

            [ True  True]
            HITS@10:1.0000

            c'est illogique ?


            • Partager sur Facebook
            • Partager sur Twitter
              31 juillet 2021 à 16:51:46

              C'est fou, tu n'as absolument pas acquis les bases pour debugger ton code ou le comprendre. Il faut y aller étape par étape.

              Que fait neg_r > r ?

              torch.sum(neg_r > r) ?

              torch.sum(neg_r > r, 1) ?

              torch.sum(neg_r > r, 1) <= 10 ?

              Fais tourner les lignes unes à une et tu verras que le résultat est conforme à l'explication donnée ...

              • Partager sur Facebook
              • Partager sur Twitter
                31 juillet 2021 à 19:54:05

                oui vous avez raison !!! l'explication de umfred est logique...

                mais la question qui se pose, c'est quoi l'utilité de cette fonction si elle nous donne le meme resultat dans tous les cas ??

                j'essie d'utiliser des metrics pour mesurer les performances d'un systeme de recommendation qui utilise " the negative sampling", dans ce cas je me suis concentré sur le hits10.

                -
                Edité par Driss EL ALAOUI 31 juillet 2021 à 19:55:57

                • Partager sur Facebook
                • Partager sur Twitter
                  2 août 2021 à 11:18:39

                  met 20 pour toutes les valeurs de neg_r  de ton dernier exemple pour voir (pour une des composantes, puis pour les 2)

                  le nom de la variable hits10 n'est pas choisi au hasard à mon avis (peut-être en relation avec le 10 du '<=10' et que le fait qu'il faut sans doute plus de 10 valeurs par composantes des torseurs)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  comprendre le fonctionnement d'une méthode

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown