python, ajustement de fonction en 4D
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

python, ajustement de fonction en 4D



  1. #1
    polo974

    python, ajustement de fonction en 4D


    ------

    Bonjour,
    Je me casse un peu les dents sur un pb d'ajustement de fonction (curve fitting, scipy.optimize.curve_fit).
    Le contexte: je réfléchi à un actuateur à câbles tendus, donc en gros, avec 3 câbles donc 3 longueurs a,b,c je positionne mon point dans l'espace x,y,z.

    Comme le câble s'enroule en hélice, mes points de départ se déplacent latéralement, et comme le câble ne part pas toujours verticalement, ça ajoute aussi des variations.
    Bref, modéliser ça, c'est un poil coton et dépendant de la qualité de réalisation.

    Donc je me dis que je pourrai au choix me calculer ou me mesurer sur une grille 3D, la longueur de câbles pour chacun des 3 câbles. Et me faire un gentil ajustement de fonction polynomiale.

    Pour info, la projection dans l'espace abc des points xyz ressemble à un cube déformé (un peu en yoyo) embroché et vrillé sur l'axe 1,1,1, les plans perpendiculaires à la brochette ressemblent à des coupelles.

    Bref, j'essaie avec un polynôme du 3ème degré (en x,y,z, ça fait du monde).
    Résultat bof, je passe au 4ème, mieux mais quand même 8% d'écart, au 5eme, ah, moins 4%, allez soyons fous, passons au 6ème degré (je vous dis pas le nombre de tetmes)...

    Badaboum, j'ai explosé la chose (écarts de 3000%, une paille, je vous dis).

    Bref, pas très raisonnable...

    Ensuite, je me suis dis, bah, j'ai des nuages de points, peut-être que je peux trouver THE lib pour me faire un fitting par morceaux (un peu dans l'esprit des courbes de Bezier, sauf que j'ai les points de passage, mais pas les points de contrôle.

    Donc si quelqu'un a une idée de génie (et son mode d'emploi), je suis très intéressé et reconnaissant.
    (Même déjà envers ceux qui m'ont lu jusqu'ici)

    (Je suis décalé en terme d'horaire et ce n'est pas (du tout) dans le cadre de mon taf, donc je répondrai, promis mais pas toujours du tac au tac.)


    Je me demande si un petit réseau neuronal (un peu spécialisé/préorienté? (comment?)) pourrait faire le taf... (fitting, ajustement, apprentissage, délire de ma part...?)

    -----
    Jusqu'ici tout va bien...

  2. #2
    gts2

    Re : python, ajustement de fonction en 4D

    Bonjour,

    Votre problème est-il celui-là ?
    Nom : Capture d’écran.png
Affichages : 101
Taille : 31,8 Ko
    Si oui, c'est calculable (éventuellement avec une fonction implicite à résoudre), d'ailleurs si je comprends bien vous l'avez fait dans le sens x=f(a,b,c) et vous le voulez dans le sens a=F(x,y,z).

  3. #3
    pm42

    Re : python, ajustement de fonction en 4D

    Citation Envoyé par polo974 Voir le message
    Je me demande si un petit réseau neuronal (un peu spécialisé/préorienté? (comment?)) pourrait faire le taf... (fitting, ajustement, apprentissage, délire de ma part...?)
    Là comme ça, je ne vois pas trop comment faire que ce soit en réseau de neurone ou IA statistique.
    Comment faire l'entrainement ? Avec quelles données ?
    Sans parler du fait que ce n'est pas très compliqué de faire ce genre d'IA quand on a un peu d'expérience mais nettement moins si on démarre.

  4. #4
    Paraboloide_Hyperbolique

    Re : python, ajustement de fonction en 4D

    Bonjour,

    Je plussoie pm42, le réseaux de neurones n'est pas le bon outil ici. Il y a moyen de calculer des B-splines de manière à ce qu'elles approximent un ensemble donné de points de manière assez "satisfaisante", mais cela ne sera jamais exact.

    Je suppose que tu peux calculer des points de ta courbe à intervalles +- réguliers (c'est ce que je comprend, puisque tu parle d'ajustement polynomial). Je propose donc plus simplement d'utiliser une interpolation au moyen de splines cubiques, d'autant qu'il y a une fonction python tout prête pour cela:

    https://docs.scipy.org/doc/scipy/ref..._interp_spline

    En espérant avoir bien compris la question et n'avoir pas répondu à côté de la plaque...

  5. A voir en vidéo sur Futura
  6. #5
    polo974

    Re : python, ajustement de fonction en 4D

    à gts2,
    en gros, oui, juste que les axes des treuils sont parallèles à ton plan de projection (on va dire dans le plan horizontal) et tangent au cercle passant par tes points A, B et C. et que le câble se déroulant, sont point de départ se déplace latéralement d'où le vrillage que j'ai indiqué dans ma description...

    je dispose de quoi calculer (approximativement et par itérations) a,b,c = f(x,y,z).
    on pourrait se dire, ah, ben c'est ok... oui, mais non, il y a de très fortes chances que par la suite, j'utilise un nuages de points de calibrations plutôt qu'un nuage de points précalculés (pour pouvoir utiliser une base mécanique rigide mais mal maîtrisée géométriquement (c'est un choix)).

    actuellement, je visualise (sur mayavi) un "nuage" de points comme je l'ai décrit.
    j'arrive à approximer avec 3 polynômes, mais avec une trop grosse erreur, et quand je monte le degré du polynôme, j'explose le process de fitting (prévisible, et en fait, je suis assez bluffé d'être arriver à converger avec des polynômes à 3 dimensions du 5ème degré).

    donc la solution sage serait de découper mon volumes en sous-volumes et d'en extraire des polynômes de degré moindre à partir de mes points (vaguement calculés ou mesurés). mais c'est pas drôle...

    à pm42,
    pour faire l’entraînement, j'ai des points soit précalculés (en mode simulation, on va dire), soit des points de calibration (qui risque d'être fastidieuse, je sais).
    en fait, j'imaginais un réseau dont la première couche ferait (quitte à lui imposer la "direction") le "découpage" en sous volumes (mais je sens bien que les frontières seraient non marquées, ce qui en soit est un avantage).
    je ne sais absolument pas si on peut "isoler" les neurones par groupes. j'ai vu que la structure du cerveau travaille par colonnes corticales et je trouve qu'ici, ce serait assez adapté (vision de celui qui n'a (encore) rien codé en IA, je l'assume)).
    mais comme tu dis, "ce n'est pas très compliqué de faire ce genre d'IA", je suis peut-être déjà entrain de me faire des noeuds au cerveau en cherchant une "optimisation", là où il n'y en a pas besoin.

    et comme tu le dis aussi "... mais nettement moins si on démarre", et là, je suis en mode démarrage à froid sans start-pilot...
    mais j'ai envie de faire un peu joujou, j'ai "juste" à trouver un point d'entrée dans l'arène.
    Jusqu'ici tout va bien...

  7. #6
    polo974

    Re : python, ajustement de fonction en 4D

    @Paraboloide_Hyperbolique,
    croisement...
    en fait, là, je veux extraire une caisse de paramètres pour pouvoir les injecter dans un code tournant dans un petit microcontrôleur. la partie calcul se fera en C/C++.

    là, la question, c'est juste comment arriver à calculer les paramètres, sachant que l'algo les utilisant n'est pas figé, du moment que ça ne bouffe pas trop de cpu dans le petit microcontrôleur.

    en écrivant ça, je crois que je peux faire une croix sur les neurones utilisant les sygmoïdes ou autres "belles" fonctions bien chères. il faut que je trouve une autre raison pour me lancer là-dedans...

    par contre, les tenseurs... quelle lib (vraiment utile)? (heu oui, vu que scipy.optimize.curve_fit reste cloîtré sur un seul cpu...
    Jusqu'ici tout va bien...

  8. #7
    pm42

    Re : python, ajustement de fonction en 4D

    Citation Envoyé par polo974 Voir le message
    à pm42,
    pour faire l’entraînement, j'ai des points soit précalculés (en mode simulation, on va dire), soit des points de calibration (qui risque d'être fastidieuse, je sais).
    Citation Envoyé par polo974 Voir le message
    Tu en as des dizaines ou centaines de milliers ?
    en fait, j'imaginais un réseau dont la première couche ferait (quitte à lui imposer la "direction") le "découpage" en sous volumes (mais je sens bien que les frontières seraient non marquées, ce qui en soit est un avantage).
    je ne sais absolument pas si on peut "isoler" les neurones par groupes.
    Franchement, concevoir une structure de réseau de neurones en partant de rien n'est vraiment pas à la portée du 1er venu ni même de quelqu'un qui pratique l'IA.
    C'est très abstrait et nécessite beaucoup d'expérience pour toute autre chose qu'un problème très simple niveau exercice de cours.

    En général, on prend de réseaux adaptés à la classe générale du problème et on les réentraine sur des données spécialisées.

    Citation Envoyé par polo974 Voir le message
    mais comme tu dis, "ce n'est pas très compliqué de faire ce genre d'IA",
    Oui, quand on a le modèle adapté et les données, entrainer une IA, c'est 10 lignes de code max.
    Mais avant d'en arriver là, il y a en général beaucoup, beaucoup de travail et pas mal d'expertise pour éviter les pièges.

    Citation Envoyé par polo974 Voir le message
    et comme tu le dis aussi "... mais nettement moins si on démarre", et là, je suis en mode démarrage à froid sans start-pilot...
    mais j'ai envie de faire un peu joujou, j'ai "juste" à trouver un point d'entrée dans l'arène.
    Si tu veux faire joujou, essaie avec un problème plus simple et où on sait que l'IA marche. Sinon, franchement, tu es en train de dire que tu veux apprendre à jongler mais que tu vas commencer avec des tronçonneuses en marche.

  9. #8
    polo974

    Re : python, ajustement de fonction en 4D

    Des points, pour le moment, je peux en calculer plein (là, je joue avec une grille régulière de 22 au cube soit dans les 10k points, mais en calibration, à moins d'avoir un automatisme, ça va être dur d'en avoir autant.

    Bon, je vais laisser les tronçonneuses aux bûcherons...

    Je vais donc découper mon espace en sous-espaces et voir ce que ça donne...
    Jusqu'ici tout va bien...

  10. #9
    pm42

    Re : python, ajustement de fonction en 4D

    Citation Envoyé par polo974 Voir le message
    Des points, pour le moment, je peux en calculer plein (là, je joue avec une grille régulière de 22 au cube soit dans les 10k points, mais en calibration, à moins d'avoir un automatisme, ça va être dur d'en avoir autant.
    Ce qui serait possible, c'est de calculer plein de configurations et plein de points et pour chaque point, une note. Puis de mettre 1 sur ceux où la note est la bonne et 0 pour les autres.
    Et après, tu entraines un IA de base genre xgboost là dessus.

    Sauf que tu vas avoir probablement très peu de 1 par rapport aux 0. Et l'IA va donc avoir du mal à apprendre parce que par défaut, elle va avoir tendance à dire que vu que 0 est juste 99% du temps, elle a juste à te répondre ça tout le temps et elle gagne.
    C'est à la fois intelligent et très con (termes qu'on ne devrait pas appliquer à l'IA ni d'ailleurs aux humains d'ailleurs sauf "con" qui est un raccourci pratique )

    Donc il faut "rééquilibrer" les données en créant artificiellement de nouveaux 1 ou bien en virant plein de 0.
    Comme je te disais, c'est à la fois simple et en fait compliqué dès qu'on veut avoir une chance que ça marche.

  11. #10
    polo974

    Re : python, ajustement de fonction en 4D

    Citation Envoyé par polo974 Voir le message
    ...
    Je vais donc découper mon espace en sous-espaces et voir ce que ça donne...
    Et bien, ça donne pas trop mal...
    J'ai ajusté sur des sous-ensembles pas si petits que ça et je gagne énormément en précision.
    donc je suis passé en min/max du delta de longueur de mes 3 câbles pour évaluer l'erreur d'ajustement.

    avec (pour chaque câble) un polynôme du 3ème degré sur 4 dimensions (x,y,z en entrée et chaque longueur de câble en sortie)

    initialement sur le volume total: j'avais des min/max de l'ordre de +/-4 pour un cube de 200 de coté, ça faisait beaucoup...

    en découpant chaque coté par 4, donc avec en tout 64 sous-cubes, je me retrouve avec moins d'un dixième pour un cube de 50 de coté sur une des longueurs, les autres étant (nettement meilleures).
    et en découpant chaque coté par 8, donc avec en tout 512 sous-cubes, je me retrouve avec très nettement moins d'un centième pour un cube de 25 de coté.

    bref, avec 512 sous-cubes et 20 coefs de polynôme, je n'ai "que" 10240 float32 par câble à stocker, c'est donc jouable (de nos jours).

    finalement, je suis resté à la fonction polynomiale que je connaîtrai à coup sûr vu que c'est la même qui sert à ajuster les paramètres et ensuite à calculer les longueurs en lui passant les paramètres précédemment ajustés.

    j'ai laissé tombé les béziers et autres splines (b ou pas), car pas pratiques ici, demandent des points de contrôles qu'il m'aurait fallu "inventer" et la montée en dimension 4 n'est pas clairement documentée, bref, que des emm...

    (et coté réseau neuronal, il va falloir que je trouve une autre "bonne" raison pour m'y frotter... un jour, peut-être...)

    en fait, il me faut encore estimer l'erreur entraînée en x,y,z selon l'erreur sur les longueurs de câbles a,b,c pour pouvoir conclure. mais là, c'est tout pour aujourd'hui...
    Jusqu'ici tout va bien...

  12. #11
    MissJenny

    Re : python, ajustement de fonction en 4D

    Citation Envoyé par polo974 Voir le message
    je dispose de quoi calculer (approximativement et par itérations) a,b,c = f(x,y,z).
    ça ne paraît pas bien difficile de faire le calcul exact. Ou bien quelque-chose m'échappe.

  13. #12
    polo974

    Re : python, ajustement de fonction en 4D

    Citation Envoyé par MissJenny Voir le message
    ça ne paraît pas bien difficile de faire le calcul exact. Ou bien quelque-chose m'échappe.
    bonjour,
    la géométrie de base: c'est à dire les longueurs des arêtes d'un tétraèdre, c'est facile, sauf que:
    • les câbles se dévident d'un cylindre, donc il y a un décalage selon l'angle du plan tangent au cylindre.
    • pour ne pas faire "dérailler" les câbles de leur hélice nominale, il y a des poulies d'alignement latéral, donc le segment n'est plus une simple droite.
    • les câbles se dévident du treuil en hélice, donc il y a translation du sommet,
    • (et j'en ai peut-être oublié...)
    donc déjà, là, le calcul est assez sportif.

    La réalisation mécanique ne sera pas au centième, ni au dixième, il y a aussi une certaine inconnue sur le comportement du câble sur le treuil (le diamètre réel d'enroulement).
    En fait, le but est justement de pouvoir s'affranchir de la précision de réalisation par un calibrage puis ajustement de fonctions.
    Jusqu'ici tout va bien...

Discussions similaires

  1. Python tensorflow probleme ajustement poids du model pour optimizer
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 07/02/2023, 10h01
  2. Fonction ID3 python
    Par invite13fdc4b0 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 19/09/2015, 18h01
  3. Ajustement de fonction
    Par invitefd3c8bd7 dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 16/03/2013, 08h03
  4. Ajustement de fonction discrete
    Par invite03532a2b dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 12/06/2007, 15h22
  5. Ajustement du volume en fonction du bruit ambiant
    Par invite5dddaf9d dans le forum Électronique
    Réponses: 8
    Dernier message: 18/11/2005, 18h20