« Besoin d'aide? Questions / Réponses

Questions Semaine 6 et Homework

5 replies
Last
Bonjour,


Dans la feuille "arcimboldo.ipynb" , dans une des questions bonus, on nous demande d'écrire une fonction qui calcule la corrélation de chaque pixel d'une image, avec une couleur donnée.

J'ai écris ce code, cf. screenshot, le code me semble correct (les résultats aussi), néanmoins l'exécution est très lente et je ne sais pas si mon algorithme est trop complexe pour rien, ou si c'est normal étant donné le grand nombre de calculs de corrélation ?


Pour ce qui est du "Homework", la feuille "VIDEO.ipynb" ne fonctionne pas de mon côté, le constructeur de la classe "ani_img" utilise la fonction "get_files" qui semble venir de la librairie Keras.

NB: L'ensemble du code est push sur mon GitLab, https://gitlab.u-psud.fr/nelson.proia/SCIENCE_DONNEES_TP_03.



5 replies
  1. Re : Questions Semaine 6 et Homework
    Mon implantation mets quelques secondes aussi.  Avec cet algorithme, il y a un
    paquet de corrélations à calculer (combien?). Pour aller plus vite, il faudrait
    vectoriser les opérations au niveau de numpy / compiler le code. Ou mieux utiliser
    une bibliothèque qui fait déjà le boulot. Ce sera pour plus tard!

    Au passage: mieux vaut utiliser des compréhensions que des boucles. Ou encore mieux le constructeur de tableau numpy.fromfunction prenant une fonction en argument.
    1 reply
  2. Re : Questions Semaine 6 et Homework
    Je vois, j'ai essayé d'implémenter 3 fonctions différentes (cf. les screens), on à donc:


      - Avec des for loops (cf. color_correlation_filter_one)

      - Avec numpy.fromfunction (cf. color_correlation_filter_two)

      - Avec des compréhensions (cf. color_correlation_filter_three)


    J'ai calculé les temps d'exécution pour les 3 fonctions (cf. les screens), je suppose qu'en passant par Jupyter ce n'est pas très fiable mais ça donne au moins un ordre d'idée.

    On voit bien que les temps d'exécution sont très proches (en exécutant plusieurs fois on voit qu'il n'y à pas réellement de fonction plus rapide que les autres).

    Alors pourquoi préférer utiliser des compréhensions, qui au final peuvent être moins lisibles que des boucles for (pas forcément dans notre exemple) ?


    NB: Je ne sais pas si vous avez vu ma deuxième question, je la recopie donc au cas ou : "Pour ce qui est du "Homework", la feuille "VIDEO.ipynb" ne fonctionne pas de mon côté, le constructeur de la classe "ani_img" utilise la fonction "get_files" qui semble venir de la librairie Keras."









  3. Re : Questions Semaine 6 et Homework
    Tu peux utiliser %time et %timeit pour faire des mesures de temps dans Jupyter.

    Une compréhension exprime mieux l'intention: construire un tableau, plutôt
    que les détails de *comment* le remplir. Cela ouvre aussi souvent la porte à 
    l'utilisation d'itérateurs pour réduire l'usage mémoire.

    Maintenant que je vois le code: un idiome type map serait le plus pertinent
    (je n'ai plus en tête de la meilleure manière de le faire avec numpy).
    1 reply
  4. Re : Questions Semaine 6 et Homework
    D'accord merci beaucoup pour votre réponse je vais voir ce que je peux trouver à ce sujet.
  5. Re : Questions Semaine 6 et Homework
    La fonction get_files se trouve dans utilities.py dont une copie se trouve à

    https://drive.google.com/file/d/12jTMIXoAU9zFaIiWnoortIhuSqtyQydn/view?usp=sharing

    Isabelle