Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN

Le pub des programmeurs

  • 1 927 réponses
  • 117 participants
  • 131 686 vues
  • 130 followers
Sujet de la discussion Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le sujet de la discussion
426
Mais pourquoi tu dois tout coder toi meme ? Ca me parait un peu con, a moins que tu codes ca pour un taf. Parce que rien que la FFT, c'est pas trivial si tu veux implementer ca de maniere optimale, et puis tout le reste fait quand meme appel a pas mal de notion de traitement de signal.

Pour les GMM, je fais un peu de pub, mon module pyem pour python marche bien maintenant, et est relativement utilisable (comprendre peut traiter des dizaines de milliers de samples en plusieurs dizaines de dimensions en temps raisonnable, ie quelque minutes sur des machines pas trop vieilles) tant qu'on se cantonne a des modeles diagonaux:

http://svn.scipy.org/svn/scipy/trunk/Lib/sandbox/pyem/

Il y a aussi le BIC pour le clustering automatique, une implementation initiale de EM recursif, et bientot j'espere des methodes de regularisation pour les matrices de covariance.

Les figures suivantes sont toutes obtenues en une 20ne de lignes de code python :)



427
Merci pour tout ca :)
Mais justement c'est pour un (petit :oops: ) taf.
La partie GMM fonctionne (j'ais comparé avec torch pour debugger, le code le plus attroce du monde... si j'avais su j'aurais regarder le tiens gabou).

Le liens sur les fft est pas mal du tout!! J'ai toujours eu l'impression de passer à coté de quelques choses... :oops:
428

Citation :
(j'ais comparé avec torch pour debugger, le code le plus attroce du monde... si j'avais su j'aurais regarder le tiens gabou).



Tu m'etonnes, du C++ de chercheurs, c'est le pire code du monde. Meme le C++ 'normal' a cote est joli. T'aurais du regarde du cote des codes matlab pour les GMM, quand meme.

Pour les MFCC, tu peux utiliser ce code comme reference pour comparer:

https://labrosa.ee.columbia.edu/matlab/rastamat/mfccs.html

Mais si c'est pour un taf, je comprends vraiment pas l'interet de tout coder en java, surtout la FFT, c'est stupide. Il y a le module de Soras que tu peux utiliser pour de la FFT, qui est rapide pour des puissances de 2, et est utilisable dans du commercial sans cout supplementaire.
429
Pas mal Pov Gabou !

Citation :
Pour les GMM, je fais un peu de pub, mon module pyem pour python marche bien maintenant, et est relativement utilisable.


Man google -> Je veux savoir ce qu'est un GMM.

Je me souviens avoir vu un tutorial en flsah sur le site de NI, mais je ne sais plus si il faut posséder un produit de chez eux ou pas...je vérifie.

Edit : non, en fait y'a pas besoin de s'enregistrer, mais il n'explique rien de bien passionnant sur le fonctionnement de l'algorithme. Ils font la promo de labview, leur soft d'analyse, et nous explique plutot comment régler un soft procédant à une fft, que commment la réaliser.
Mais bon des fois, avoir ue vue utilisateur d'abord, c'est quand même pas mal !

http://soundcloud.com/bat-manson

430

Citation : Tu m'etonnes, du C++ de chercheurs, c'est le pire code du monde.


un condensé de ce que l'on troue dans torch ;)

float *mean_acc_i = mean_acc[i];
float *x = inputs->data;

for(julie = 0; julie < n; julie++) {
*mean_acc_i++ += *x * *x++;
}

float *mean_i = mean[i];
float *weight_acc_i = weight_acc[i];
mean_acc_i = mean_acc[i]

for(andrea = 0; andrea < n; andrea++, weight_acc_i++)
*mean++ = *mean_acc_i++ / *weight_acc_i++

:lol:

(j'ai écris n'importe quoi, seul la syntaxe sert d'exemple)
431
GMM = Gaussian Mixture Model. En gros, l'idee est de modeliser des donnees en utilisant un modele de melange de gaussiennes: tu ecris la pdf de ton modele par f(x; theta) = somme(a_i * f(x; mu_i, va_i)) ou les K f(x, _mu_i, va_i) sont des gaussiennes multivariees, les a_i des poids positifs dont la somme est egale a 1.

L'algorithme EM permet de calculer les parametres a, mu et va en utilisant le principe du maximum de vraisemblance. Tu peux montrer (facile) que le modele est equivalent a un modele ou tu tires au hasard un entier i parmi K avec probabilite a_i, et tu generes un echantillon issue d'une variable aleatoire gaussienne de paramettres mu_i, va_i. Ca permet de faire du clustering. Il y a une litterature enorme sur le sujet (modeles de melanges et "apprentissage statistique"; je hais le terme apprentissage, mais c'est l'expression consacree).

C'est utilise en parole (reconnaissance de parole et de locuteur), et dans enormement d'autres champs ou l'apprentissage statistique est utilise. Perso, j'utilise des versions recursives (ou tu estimes les parametres recusrivement, cad "online") pour faire de la detection de voix (j'ai un papier la dessus a interspeech 2006 si ca t'interesse et que tu as acces aux proceeding de interspeech).
432

Citation : je hais le terme apprentissage


Pourquoi ca?
433

Citation :
un condensé de ce que l'on troue dans torch



Chez moi, ca donne ca :) :


#===========================================
# GMM of 30 comp, 45 dimension, 1e5 frames
#===========================================
d = 45
k = 30
nframes = 1e5
niter = 10
mode = 'diag'

#+++++++++++++++++++++++++++++++++++++++++++
# Create an artificial GMM model, samples it
#+++++++++++++++++++++++++++++++++++++++++++
# Generate a model with k components, d dimensions
w, mu, va = GM.gen_param(d, k, mode, spread = 3)
gm = GM.fromvalues(w, mu, va)

# Sample nframes frames from the model
data = gm.sample(nframes)

#++++++++++++++++++++++++
# Learn the model with EM
#++++++++++++++++++++++++
# Init the model
lgm = GM(d, k, mode)
gmm = GMM(lgm, 'kmean')

em = EM()
like= em.train(data, gmm, niter)



Utiliser entierement du C++, ca me parait vraiment debile aujourd'hui (enfin, je vais pas rouvrir le debat, il a ete fait aujourd'hui meme), surtout si c'est pour utiliser de l'arithmetique de pointeurs que n'importe quel compilateur digne de ce nom peut faire par lui meme a partir des indexes depuis au moins 10 ans.
434

Citation :
Pourquoi ca?



Ben je sais pas, en maths, quand tu fais de l'interpolation, t'appelles pas ca de l'apprentissage. C'est un terme ultra-pompeux, comme intelligence artificielle ou reseau de neurones; tout le monde sait que ca n'a plus rien a voir ni avec l'intelligence ni le cerveau, mais on fait semblant, parce que ca fait plus classe.

C'est comme certains nouveaux trucs a la mode, "document understanding" ou "speech understanding"; tout ca pour te filer un resume qui contient la premiere et derniere phrase du document dans 95 % des cas... Mais bon, la encore c'est un autre debat.
435

Citation :
est un terme ultra-pompeux, comme intelligence artificielle ou reseau de neurones;


héhé. C'est à la mode. Mais bon, pour le document understanding c'est normal : ce sont généralement les mêmes équipes de recherches, ou des transfuges, que ceux qui utilisent journaiérement les termes d'apprentissage automatique.

Parce qu'on peut qualifier tout système avec feedback, résonant, de système à apprentissage automatique, non ? Je n'ai jamais rencontré de définition qui me convienent, concernant l'apprentissage automatique. Mais ce n'est peut être du qu'à mon ignorance !

Prenons le paradygme le plus sexy dans l'histoire, pour valoriser son travail. Le fonctionnement de l'homme et de sa pensée en est un !

Pour les réseaux de neurones par contre, j'ai rencontré tout une litterature bien précise sur le sujet. C'est utilisé dans beaucoup de domaines, l'approche est bien défini, et l'on connait les limitations. C'est ptet à la mode, mais c'est vieux comme concept !

http://soundcloud.com/bat-manson

436
Tiens c'est la première fois que je remarque la faute d'orthographe à pub des prograMeurs...

http://soundcloud.com/bat-manson

437

Citation :

Pour les réseaux de neurones par contre, j'ai rencontré tout une litterature bien précise sur le sujet. C'est utilisé dans beaucoup de domaines, l'approche est bien défini, et l'on connait les limitations. C'est ptet à la mode, mais c'est vieux comme concept



Je sais bien que c'est vieux, mais ca fait longtemps que ca n'a plus rien a voir avec les neurones. Tu prends un des bouquins de ref, qui a deja plus de 10 ans, neural networks for pattern recognition de Bishop (Excellent bouquin par ailleurs), ca n'a rien a voir avec les neurosciences.J'en discutais d'ailleurs il y a 2 jours avec un americain qui bosse dans un labo de neuro sciences au Japon, ce ce type de defauts semantiques (mais apres quelques bieres, ca a devie sur foxnews et les rednecks :oops: ). Les reseaux de neurones sont plus trop a la mode, d'ailleurs, en machine learning, j'ai l'impression; maintenant, c'est plus SVM et methodes bayesiennes (reseaux bayesiens).

Les raisons pour le document understanding et cie, je suis bien conscient des raisons :)

Citation :
Parce qu'on peut qualifier tout système avec feedback, résonant, de système à apprentissage automatique, non ?



Ouais, donc un algo de newton, c'est un algo d'apprentissage, quoi.
438

Citation :
Tiens c'est la première fois que je remarque la faute d'orthographe à pub des prograMeurs...



Si on est rigoureux, on dirait pas programmeur de toute facon pour designer quelqu'un qui programme. Un programmeur, c'est le truc que tu mets sur ta prise electrique pour faire marcher le grille pain a 8 heures du matin.
439
Je pense que d'aborder les réseaux de neurones avec l'analogie des neurones aide quand meme pas mal à comprendre...
Le bouquin de Bishop est effectivement super. Je l'avais lu pour mon TIPE en prépa. Je l'avais fait sur les reseaux de neurones et l'apprentissage automatique du langage. Si c'est pas sexy comme sujet !

J'étais tombé sur un prof de physique qui avait des gosses et une prof de math qui était passionné des questions d'intelligence. Le coup de bol. 17 au final, juste à cause d'un sujet sexy, vraiment pas à cause de mon taf effectif (même si j'avais vachement bossé, j'ai rien pu montrer de ce que j'avais fait !)

http://soundcloud.com/bat-manson

440

Citation :
Un programmeur, c'est le truc que tu mets sur ta prise electrique pour faire marcher le grille pain a 8 heures du matin.


Non ça c'est un programmateur ! :clin:

http://soundcloud.com/bat-manson

441

Citation : neural networks for pattern recognition de Bishop (Excellent bouquin par ailleurs), ca n'a rien a voir avec les neurosciences.J'en discutais d'ailleurs il y a 2 jours avec un americain qui bosse dans un labo de neuro sciences au Japon, ce ce type de defauts semantiques (mais apres quelques bieres, ca a devie sur foxnews et les rednecks ). Les reseaux de neurones sont plus trop a la mode, d'ailleurs, en machine learning, j'ai l'impression; maintenant, c'est plus SVM et methodes bayesiennes (reseaux bayesiens).



+1000 pour le bouquin de Bishop
+1000 pour les SVM


Niveau classif, quand, j'ai besoin d'un truc, je me pose pas 40000 questions, SVM !

Par contre, y a pleins d'arguments pro SVM qui ne tiennent pas la route.

Citation : Parce qu'on peut qualifier tout système avec feedback, résonant, de système à apprentissage automatique, non ?



Attention, quand y a feedback (ca depend ce que tu definis par feedback, si c'est un retour d'un systeme expert ton assertion est fausse), c'est que tu es dans des algos a apprentissage supervisé. Tu as des algos par apprentissage sans feedback, on appelle ca simplement apprentissage non supervisé. C'est le cas des carte autoorganisatrice de Kohonen par exemple (SOM)
442

Citation :
Je pense que d'aborder les réseaux de neurones avec l'analogie des neurones aide quand meme pas mal à comprendre...



J'avoue ne pas etre persuade. Enfin bon, je prefere de toute facon l'approche statistique; c'est sur que ca fait moins sexy, mais bon...

Citation :
Attention, quand y a feedback, c'est que tu es dans des algos a apprentissage supervisé.



Ca depend de quel feedback tu parles. Par exemple, si on parle de retropropagation dans les reseaux de neurones, ca n'a en soit rien a voir avec supervise/non supervise.

Les algo EM recursifs que j'utilise sont avec feedback, mais non supervises (dans l'utilisation que j'en fais; tu peux utiliser les GMM dans un contexte supervise, ou chaque mixture est une classe, ou dans une approche non supervisee, ou clustering, ou chaque gaussienne correspond a une classe, dont la probabilite cachee est trouvee grace a l'algo EM). Puis aussi, j'ai pompe l'idee dans un article sur le reinforcement learning, qui est entre supervise et non supervise.
443
Il me semble que les reseaux de neuronnes séduisaient à une époque car on disait que c'était comme le cerveau humain, maintenant le fait que ca soit une boite noire dont on peut rien en dire fait que c'est bcp moins intéréssant.
J'ai un master (tout neuf) qui contenait des unités Apprentissage automatique, Sémantique, etc, et ce qui revenais le plus souvent de la part des enseignants (chercheurs) est que l'intelligence artificielle était dès le début un abus de langage dans lequel on placait trop d'espoir, et qui finalement n'as rien fais de ce qui était promis (genre la Programmation Logique Inductive, etc).
444
Croisage Gabou, je venais jsute de corriger mon post :coucou:

En tout cas en classif, la question du classifieur n'est pas vraiement importante (K-means, RNA, SVM ou autre). L'essentiel ca va toujours rester les PARAMETRES DISCRIMINANTS

parce que tout ca c'est des systemes GIGO: Garbage In- Garbage Out :mrg:
445

Citation :
Il me semble que les reseaux de neuronnes séduisaient à une époque car on disait que c'était comme le cerveau humain,



Oui, il y a 30-40 ans, mais c'etait un modele qui de toute facon n'est plus valable depuis longtemps. Un neurone, c'est nettement plus complique qu'une sigmoide ...

Citation :

En tout cas en classif, la question du classifieur n'est pas vraiement importante (K-means, RNA, SVM ou autre). L'essentiel ca va toujours rester les PARAMETRES DISCRIMINANTS



Certes, "there is no such thing as free lunch", mais ca depend dans quel contexte tu te places. Par exemple, je trouve que ces algos de reinforcement learning sont interessants, car ca permet d'appliquer des methodes de classification avec un bon fond theorique a certains problemes ou la classification etait tres heuristique. Par exemple, pour mon probleme de detection de voix, tu vas avoir des algos sophistiques avec une machine a etat super complique; je trouve un truc comme l'algo EM recursif plus interessant (c'est pas pour rien que je me suis fait chier a le programmer et a le faire inclure dans scipy, pour que d'autres personnes puissent jouer avec).
446
Tiens dans cette discussion autour des réseaux de neurones et un gars nipponisant (devinez qui ?) ça me rappelle aibo, le chien de sony.
Ils ont utilisé un modèle bien plus compliqué qu'un simple perceptron pour l'apprentissage de la marche sur leur chien, non ? Merde encore une source à retrouver...

Je trouve ça quand même pétillant pour l'esprit cette démarche gognitive où on observe la nature on la modélise et on tente de reagrder pourquoi c'est efficace.

Pour les cartes de Kohonen, je connais pas du tout. Je crois que c'est un réseau de neurones où ils sont tous connectés entre eux, avec une organisation "à plat" non (qu'on peut représenter sur un cercle je veux dire) ?

Citation :
PARAMETRES DISCRIMINANTS


Oui +1 pour l'intuition que j'ai de ce problème, même si en classif, hummm, je suis pas du tout expert.

http://soundcloud.com/bat-manson

447

Citation : aibo, le chien de sony.
Ils ont utilisé un modèle bien plus compliqué qu'un simple perceptron pour l'apprentissage de la marche sur leur chien, non ? Merde encore une source à retrouver...


Ouais ce genre d'application c'est pas mal, y'a quelques papier de recherche sur des modèles utilisant des simulation physique pour apprendre ce genre de chose. Quand on vois le temps nécéssaire pour creer des modèles 3D animé, ca serait génial d'avoir un modèle (d'animation) de ce genre.
448
Merci les gars pour tout vos liens et informations!! Je me sens nettement moins bête devant mon problème maintenant.

Il reste toujours des zones d'ombres, mais c'est une question de temps ;)

C'est assez nouveau encore pour moi, mais il semblerai que l'appellation MFCC regroupe finalement plusieurs technique? Par exemple l'idée de base que j'avais était:
FFT -> Pre-emphasis -> mel scale filter bank -> DCT

En tant que novice, je me demandais l'importance du filtre Pre emphasis (dans spro elle est faite sur les donnée audio, et non pas sur le résultat de la FFT).

Merci, Merci Merci!!!
449

Citation : Tiens c'est la première fois que je remarque la faute d'orthographe à pub des prograMeurs


Et c'était la dernière -> correction immédiate.
450

Citation :
C'est assez nouveau encore pour moi, mais il semblerai que l'appellation MFCC regroupe finalement plusieurs technique? Par exemple l'idée de base que j'avais était:
FFT -> Pre-emphasis -> mel scale filter bank -> DCT



Deja, l'ordre est pas bon :) Le pre emphasis, il me semble, est fait dans le domaine temporel; bien sur, rien n'empeche de le faire dans le domaine spectral, mais c'est se compliquer la vie.

Bref, de memoire, j'irai verifier ce soir dans mes docs, je les ai pas au boulot, puis il doit surement y avoir plein de definitions differentes avec des resultats differents

- pre-emphasis. Simple filtre purement non-recursif, en general [1, -alpha] avec alpha dans ]0 1[ (je crois que dans Huang et Rabiner, c'est fixe a 0.99). Le but de ce passe haut est de diminuer l'importance du premier formant, qui n'est pas interessant en general (celui qui correspond a la frequence fondamentale).
- fenetrage (Hamming, par exemple)
- passage au domain spectral, log amplitude
- filtrage mel
- DCT inverse

Apres, tu peux calculer les MFCC a partir des coeff LPC, aussi, mais je me souviens plus tres bien.

La reference pour ce genre de trucs basiques de parole, c'est le Rabiner et Huang.