Python tensorflow probleme ajustement poids du model pour optimizer
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Python tensorflow probleme ajustement poids du model pour optimizer



  1. #1
    Loupsio

    Python tensorflow probleme ajustement poids du model pour optimizer


    ------

    Bonjour à tous,

    J'utilise les versions les plus recentes de keras et tensorflow, et visiblement il y a un probleme avec l'ajustement des poids du model,
    J'utilise Adam, mais j'ai essayé avec SGD et le resultat est le meme,
    mon code :
    Code:
        
    from tensorflow.keras.optimizers import Adam
    def jecompile(self,learning_rate=0.0001):
            optimizer= Adam(learning_rate=learning_rate)
            mse_loss=tf.keras.losses.MeanSquaredError()
            self.model.compile(optimizer=optimizer,
                               loss=mse_loss)
    que j'utilise Adam de tensorflow.keras.optimizers.Adam ou de tensorflow.optimizers.Adam, l'erreur est la meme

    L'erreur :
    Code:
    File C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training_v1.py:2282, in Model._make_train_function(self)
       2279 with backend.get_graph().as_default():
       2280     with backend.name_scope("training"):
       2281         # Training updates
    -> 2282         updates = self.optimizer.get_updates(
       2283             params=self._collected_trainable_weights,
       2284             loss=self.total_loss,
       2285         )
       2286         # Unconditional updates
       2287         updates += self.get_updates_for(None)
    
    AttributeError: 'Adam' object has no attribute 'get_updates'
    De ce que j'ai cru comprendre, l methode get_update() n'existe plus pour keras 2.x c'est pourquoi il ne supporte pas l'appel de : updates = self.optimizer.get_updates(
    Pourtant cet appel n'est pas de moi mais issu du code du package keras 2.11.0

    Code:
    import tensorflow 
    print(tensorflow.__version__)
    import keras 
    print(keras.__version__)
    >2.11.0
    >2.11.0
    Merci à vous

    -----

  2. #2
    pm42

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Tu dois avoir un problème d'installation.
    J'ai créé un environnement conda propre puis fait uniquement "conda install -c conda-forge tensorflow" et lancé ton code : aucun problème.

  3. #3
    Loupsio

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Salut,
    Merci pour ta réponse,
    tu l'a testé sur un model deja existant que tu avais? car dans ce que j'ai mis il manque le modele et les données sur lequel entrainer mais je ne les ai pas mis, car l'erreur concerne directement l'absence de get_update pour Adam, mais en l'etat avec juste ce fragment de code sans lancer un entrainement derrière cela ne renvoi pas d'erreur chez moi non plus

    Pour le coup hier j'ai viré tout ce qui état lié a keras et tensorflow, j'ai supprimé ma deuxieme install de python intégralement pour etre sur qu'il n'y ai pas de conflits, il ne me restait plus qu'une install de python, et j'ai vérifié a l'aide de :
    Code:
    import importlib.util
    
    package_name = 'tensorflow'
    spec = importlib.util.find_spec(package_name)
    if spec is not None:
        print(spec.origin)
    else:
        print("The package '{}' was not found.".format(package_name))
    pour tensorflow et keras il ne me trouvais bien plus aucune trace d'eux

    puis j'ai réinstallé a partir de "conda install tensorflow", dans la fenetre d'install Anaconda plutot que dans un terminal classique ou dans jupyter, pour etre sur que il n'y ait pas de problemes de repo
    maintenant je retrouve bien keras et tensorflow, il n'y a qu'une seule instance de ces ces librairies et elles sont toutes les deux en 2.11.0, mais le probleme est toujours là,

    Est ce que tu peux me dire si dans le fichier \Anaconda3\lib\site-packages\keras\engine\training _v1.py, en ligne 2282 tu as :
    Code:
    updates = self.optimizer.get_updates(
    Si oui, techniqement tu devrais avoir le meme souci que moi en lancant le model intégralement car c'est ce get_update qui n'exite plus dans les optimizer

  4. #4
    pm42

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    J'ai bien la même ligne. Je ne me souviens plus de comment j'ai testé parce que c'était pendant une crise d'insomnie

    Si tu as un bout de code qui reproduit le problème, je peux le tester, ce sera plus simple.

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

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Le bout de code se trouve plus bas, par contre il te faudra la classe qui a été créée pour l'autoencodeur (c'est une classe avec toutes ses fonctions) ,
    Il s'agit d'un autoencoder qu'on peut retrouver sur le github suivant
    https://github.com/musikalkemist/gen...autoencoder.py

    pour le faire tourner tu auras besoin également d'un numpy array en particulier (enfin, d'une shape particuliere: shape(256,64), ducoup j'en met un (a dézipper car FF n'acceptais pas les fichier.npy) que j'utilise pour le test pour t'éviter d'en générer un, mais ca devrait marcher avec n'importe quel array de shape (256,64) si tu le met dans la fonction load_data (le code plus bas) juste avant le reshape avec np.newaxis

    Et au code python retrouvé sur git, il te faudra aussi


    Code:
    import os
    import numpy as np
    
    LEARNING_RATE=0.0005
    BATCH_SIZE=64
    EPOCHS=150
    def load_data(spectrograms_path):
        x_train=[]
        for root,_,file_names in os.walk(spectrograms_path):
            for file_name in file_names:
                file_path=os.path.join(root,file_name)
                spectrogram=np.load(file_path)
                x_train.append(spectrogram)
        x_train=np.array(x_train)
        x_train=x_train[...,np.newaxis]
        print(x_train.shape)
        return(x_train)
    
    
    def train(x_train,learning_rate,batch_size,epochs):
        autoencoder=VAE(
                        input_shape=(256,64,1),
                        conv_filters=(512,256,128,64,32),
                        conv_kernels=(3,3,3,3,3),
                        conv_strides=(2,2,2,2,(2,1)),
                        latent_space_dim=128)
        autoencoder.summary()
        autoencoder.compile(learning_rate)
        autoencoder.train(x_train,batch_size,epochs)
        return(autoencoder)
    
    
    x_train=load_data("Spectrograms/")
    
    
    autoencoder=train(x_train,LEARNING_RATE,BATCH_SIZE,EPOCHS)
    autoencoder.save("model")
    Normalement avec la class dispo sur github, et cette partie, plus un numpy.array il y a tout pour tester
    Fichiers attachés Fichiers attachés

  7. #6
    pm42

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    J'ai reproduit. C'est objectivement l'enfer : le code que tu utilises dans autoencoder.py a été écrit pour Tensorflow 2.3.1. Tu peux le voir en lisant le requirements.txt ou la réponse à la seule Issue dans le dépôt Github où quelqu'un a eu un problème similaire au tien.

    Et bon courage pour installer un Tensorflow 2.3.1 en conda ou en PIP direct. Il faut sans doute télécharger le fichier .whl depuis leur site mais j'avoue que là, je fatigue un peu.

    J'ai eu un autre problème avec la façon dont il définit ses optimizers et une solution était dans stackoverflow, coup de chance qui fait gagner du temps.
    Après, on se retrouve à importer une des nombreuses versions d'Adam qui sont dans l'environnement et pas la bonne... Les joies habituelles de Python.

    Vu comme ça, je ne suis pas convaincu par son code ni par ses réponses à l'issue...
    Ni par le fait qu'un Tensorflow plus récent résout le problème mais ça vaut la peine d'essayer.
    Dernière modification par pm42 ; 06/02/2023 à 02h42.

  8. #7
    umfred

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    avec un conda install tensorflow==2.3.1 pour indiquer la version, l'installation ne se fait pas ?

    Edit: bon ok, pb, je viens de tester avec pip ....
    Dernière modification par umfred ; 06/02/2023 à 10h39.

  9. #8
    umfred

    Re : Python tensorflow probleme ajustement poids du model pour optimizer


  10. #9
    pm42

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Le problème est que la version 2.11.1 est la "long term support" et donc que pour en utiliser une plus récente, il faut aller la chercher et quand je dis cela, c'est que cela m'a mis de bonne humeur de voir que pour faire tourner un truc aussi simple que le bout de code de Loupsio, on se retrouve à devoir se battre à chaque étape.

    Bon, le problème semble être plus avec la classe qu'il a récupéré sur GitHub mais la gestion des versions/dépendances dans Python est un grand moment d'incompétence (comme pas mal de choses avec ce langage).

  11. #10
    umfred

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    peut-être aussi qu'un nous indiquant les erreurs, il y a moyen de corriger le script pour qu'il fonctionne dans la dernière version (ils ont peut-être réorganisés les fonctions dans les modules)

  12. #11
    Loupsio

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Je ne doute pas que le code sur git puisse être optimisé , mais j'ai l'impression que c'est plus la librairy keras qui pose probleme puisqu'au final peut importe comment est monté l'autoencodeur sur git, c'est la modification des poids de l'optimizer qui ne passent pas, or il a beau avoir monté "manuellement" l'autoencodeur, il n'a pas refait l'optimizer puisqu'il utilise Adam directement issu de keras, et que le probleme avec Adam est quand ses poids son modifiés, non pas par une fonction créé "manuellement", mais directement par du code issu de la librairie keras également et qui veut appliquer une fonction qui n'existe pas chez l'optimizer, c'est d'ailleurs cette partie la que je ne comprends pas, comment une même librairie (keras)peut ne pas fonctionner sur elle même? cela veut techniquement dire que n'importe quel model devrait tomber en erreur puisque dès que model.fit est appelé (fonction présente dans keras : \training_v1.py:854, in Model.fit ) c'est model.fit (de keras) qui va tomber en erreur parce que keras va faire appel a get_update() qui ne peut pas s'appliquer sur l'optimizer natif, lui aussi issu de keras

    J'ai eu un autre problème avec la façon dont il définit ses optimizers
    si tu parles de sa loss j'ai eu aussi un probleme avec ca du coup personnellement je l'ai remplacé par une mean squared error plutot que ses fonctions de loss

  13. #12
    pm42

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Tu as peut-être raison et je me rends compte que je me suis trompé dans les numéros de version mais je n'ai pas le temps de creuser de mon coté.
    Désolé.

  14. #13
    Loupsio

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Pas de soucis,
    je vais essayer de trouver une autre option, j'ai voulu installer la version 2.3.1 dans un environnement virtuel, mais il arrive pas a installer la bonne version numpy 1.18.5, visiblement a cause de ma version python (3.9 et ce numpy va jusqu'a 3.8) du coup installer une ancienne version de python pour installer une ancienne version de numpy, pour installer une ancienne version de tensorflow... ca devient lourd et redondant meme pour moi

    je vais continuer de mon coté
    merci pour l'aide

  15. #14
    polo974

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    il faut farfouiller dans le legacy...

    https://github.com/keras-team/keras/...ptimizer_v2.py
    ligne 868
    Code:
          def get_updates(self, loss, params):
    ne me demander pas comment finir (et je ne garantis rien, je donne juste une piste bonne ou fausse...)

    vive le grep -r

    edit: je viens de voir plein de résultats google(keras legacy)...
    Dernière modification par polo974 ; 07/02/2023 à 09h03.
    Jusqu'ici tout va bien...

  16. #15
    pm42

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    Oui mais dans mon install conda minimale, j'ai quand même 8 classes Adam différentes dans différents fichiers dont 5 appelés adam.py mais pas tous.
    Il faut donc trouver le bon jeu d'imports dans le bon sens ce qui fastidieux.

  17. #16
    polo974

    Re : Python tensorflow probleme ajustement poids du model pour optimizer

    il faut une ia pour trouver le bon...

    vu qu'adam est aussi présent dans legacy, c'est lui qu'il faut sans doute prendre ici...

    en fait, on a aussi get_updates dans:

    https://github.com/keras-team/keras/...ptimizer_v1.py

    qui contient aussi la classe Adam...

    bref, c'est par là que je chercherai pour commencer...

    ensuite, comment faire pour ramener le sujet à la version actuelle, ben... heu... moi pas savoir (et la pause de midi est passée).


    heu, coté imports fastidieux, java, c'est pas mal aussi...
    Jusqu'ici tout va bien...

Discussions similaires

  1. Problème pour définir (Python)
    Par PetiteAnne dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 24/02/2020, 10h16
  2. [Python] Problème de lag de programme et essai de Timer python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 20
    Dernier message: 26/01/2018, 15h14
  3. Problème pour faire fonctionner une boucle (python)
    Par fodiltreize dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 22/04/2017, 09h15
  4. Poids d’une ITE : problème pour un appartement ?
    Par invite1c72bf2d dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 2
    Dernier message: 28/06/2009, 16h46