Programme se bloque

Programme se bloque - Python - Programmation

Marsh Posté le 13-02-2014 à 22:58:04    

Bonjour,
J'ai un programme en python qui se bloque de temps en temps au niveau de la fonction suivante:
 

Code :
  1. def learnerTest( naTrain, naTest ):
  2. #create the learner with the train set with K=5
  3. cLearn = ftu.createLearner( naTrain, lKnn=5 )
  4. #get the Y values predicted by the learner
  5. Ypredicted = cLearn.query( naTest[:,:-1] )
  6. #get the actual Y values
  7. Y = naTest[:,-1]
  8. #calculate the correlation coefficient
  9. corrcoeffi = np.corrcoef(Y,Ypredicted)[0][1]
  10. return corrcoeffi


Ça se bloque au niveau de la ligne 9:

Code :
  1. corrcoeffi = np.corrcoef(Y,Ypredicted)[0][1]


 
Des fois ça ne bloque pas, des fois ça bloque. Et je n'ai pas encore compris quels facteurs influençaient sur le fait que ça bloque ou pas.
Ce qui est bizarre, c'est que quand ça bloque, je n'ai pas de message d'erreur. Le processus "python" ne s’interrompt pas, il est toujours présent dans la liste des processus du gestionnaire de tâches, mais aucune ressource CPU n'y est accordé. Mon utilisation de CPU tombe a presque 0%. J'ai laissé l'ordi tourner une journée comme ca et rien ne se passe. Ca resque bloqué au niveau de cette ligne:

Code :
  1. corrcoeffi = np.corrcoef(Y,Ypredicted)[0][1]


 
Une idée d'où peut venir le problème ou de comment je pourrais trouver le problème?
 
Config:
Windows 8
WinPython 64 bits 2.7.6.2

Reply

Marsh Posté le 13-02-2014 à 22:58:04   

Reply

Marsh Posté le 15-02-2014 à 10:57:17    

Je tiens à préciser:
- en testant plusieurs fois le même code, avec les mêmes entrées (rien ne change), un coup ça bloque, un coup ça ne bloque pas...
- les données que je traite (par exemple Y et Ypredicted) sont des matrices de grandes tailles.
 
Au secours!! Personne n'a une idée de comment je pourrais comprendre ce qui bloque?

Reply

Marsh Posté le 16-02-2014 à 12:16:11    

En recopiant la fonction corrcoef dans mon programme - donc maintenant je ne l'importe plus de la bibliothèque numpy-, j'arrive à détailler un peu plus l'origine de mon problème:
La fonction corrcoef fait appel à la fonction numpy.cov qui fait elle même appel à la fonction numpy.dot - multiplication matricielle. Et c'est à l'appel de cette dernière fonction que mon programme bloque.
 
Je n'ai pas trouvé dans numpy où elle était codé. Mais j'ai cru comprendre qu'elle utilisait la libraire BLAS ou DOTBLAS.
D'après ce que j'ai compris la fonction numpy.show_config() permet de savoir quelle librairie BLAS est utilisée. J´ai joint le résultat ici: http://www.developpez.net/forums/attachments/p138240d1392548291/autres-langages/python-zope/numpy-corrcoef-numpy-dot-bloque-probleme-librairie-blas/show_config.jpg/
Ce qui est intéressant, c'est que l'adresse qui est citée partout:

Code :
  1. C:/Program Files (x86)/Intel/Composer XE/mkl


n'existe pas!
Est-ce que ça un lien avec mon problème?


Message édité par gengina le 16-02-2014 à 12:18:58
Reply

Marsh Posté le 16-02-2014 à 15:45:46    

Bonjour,
 
Si tu connais la ligne qui bug, pourquoi tu n'utilises pas un simple bloc try-except avec un petit print ?
 

Code :
  1. try:
  2.     corrcoeffi = np.corrcoef(Y,Ypredicted)[0][1]
  3. except:
  4.     print((Y, Ypredicted))


 
Ça permettra de savoir à quelles valeurs de Y et Ypredicted ça déconne...

Reply

Marsh Posté le 16-02-2014 à 16:20:19    

A l'intérieur de la fonction numpy.corrcoef, c'est la fonction numpy.dot qui déconne. Comme les variables d'entrées X et Y sont très grandes (dimensions: 5203x2 et 2x5203), je n'imprime que leur dimension:

Code :
  1. print X.shape
  2. print Y.shape
  3. output = numpy.dot(X,Y)


Je ne pense pas que ces variables d'entrées soient en cause, parce que en relançant plusieurs fois mon programme, en ne changeant rien, avec les mêmes valeurs d'entrées, un coup ça marche, un coup ça marche pas.


Message édité par gengina le 16-02-2014 à 16:21:56
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed