IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCL Discussion :

Réseau de neurones #QNaN


Sujet :

OpenCL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut Réseau de neurones #QNaN
    Bonjour,
    ça fait pas mal de temps que je bosse sur un réseau de neurones sur GPU avec OpenCL, je pensait enfin arriver au bout mais là je bloque :
    Après plusieurs itérations les sorties sont sensées s'approcher des sorties idéales mais au lieu de ça elles s'approchent de -1 ou 1
    Mais ce n'est pas tout : au bout n'un nombre d’itérations qui semble aléatoire (entre 60 et 100 en général), toutes les sorties seront "#QNaN"
    Je me dit que peut être les 2 problèmes sont liés...
    Qu'est-ce qui pourrait causer un QNaN ?
    Ma carte graphique est une Nvidia gtx 1060, mes drivers sont a jour et le problème est toujours présent en exécutant le programme sur mon processeur (toujours avec avec OpenCL)

    Je met un bout de code mais vu comme il est sale je doute que ça soit vraiment utile :/

    kernel backpropagation : exécuté sur chaque neurone d'une couche, couche après couche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    __kernel void back1(__constant float* outputs, __constant float* excepted, __global float* buffer, __constant float* weightsBuffer, __global float* newWeightsBuffer, int offset, int weightsOffset, int weightsOffset2, int inputNbr, int outputNbr, int deltaOffset, int neuroneNbr, int outLayer, float learningRate){
    	size_t id = get_global_id(0);
    	float D = 0.0f;
    	float S = 0.0f;
    	float O = outputs[offset + id];
    	if (outLayer){
    		float T = excepted[id];
    		D = (O - T)*(1.0f - (O*O));
    		buffer[id] = D;
    	}
    	else{
    		for (int i = 0; i < outputNbr; ++i){
    			S += weightsBuffer[weightsOffset2 + i + outputNbr*id] * buffer[deltaOffset + i];
    		}
    		D = S*(1.0f - O*O);
    		buffer[id] = D;
    	}
    	for (int i = 0; i < inputNbr; ++i){
    			newWeightsBuffer[weightsOffset + id + neuroneNbr*i] = weightsBuffer[weightsOffset + id + neuroneNbr*i] - (outputs[offset - inputNbr + i]*D*learningRate);
    	}
    }
    kernel feedforward, pareil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    __kernel void feedforward(__constant float* weights, __global float* inputs, int inputNbr, int offset, int offsetWeights){
    	float t = 0.0f;
    	float e = 0.0f;
    	for (int i = 0; i < inputNbr; ++i){
    		t += (weights[(get_global_id(0) * inputNbr) + i + offsetWeights] * inputs[offset - inputNbr + i]);
    	}
    	e = exp(t*2.0f);
    	t = (e - 1.0f) / (e + 1.0f);
    	inputs[offset + get_global_id(0)] = t;
    }
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par RedSkidy Voir le message
    Après plusieurs itérations les sorties sont sensées s'approcher des sorties idéales mais au lieu de ça elles s'approchent de -1 ou 1
    Cela doit provenir des labels de ton échantillon d'apprentissage. Vérifie également la fonction d'activation de ta dernière couche.


    Citation Envoyé par RedSkidy Voir le message
    Mais ce n'est pas tout : au bout n'un nombre d’itérations qui semble aléatoire (entre 60 et 100 en général), toutes les sorties seront "#QNaN"
    Qu'est-ce qui pourrait causer un QNaN ?
    Il ne semble pas y avoir de réponse précise sur ce sujet. Comme cela se produit sur toutes les sorties, cela devrait venir d'un poids qui serait lui-même QNaN. Lorsque tu commences à converger, les gradients vont devenir TRES petits et tu te retrouves face au problème de "gradient fading". Un gradient trop faible pourrait créer une division par zéro ou un manque de précision faire un changement de signe (pas convaincu par cette dernière).
    Bref... à partir du moment où tu as un QNaN, il te faut malheureusement vérifier tout les poids, voire refaire le forward pour traquer ce qui l'a généré.



    Citation Envoyé par RedSkidy Voir le message
    Je me dit que peut être les 2 problèmes sont liés...
    J'ai un doute... mais ce n'est qu'une intuition.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Réponses: 60
    Dernier message: 12/05/2011, 15h18
  2. Programmer un réseau de neurones impulsionnels ou SNN
    Par @matlab@ dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/02/2007, 11h47
  3. Réseau de neurones - exporter
    Par kairn_ dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/01/2007, 11h21
  4. interface graphique, réseau de neurones
    Par korp69 dans le forum C++
    Réponses: 19
    Dernier message: 13/11/2006, 14h44
  5. Réseau de neurones - reconnaissance visage
    Par PrAbronsius dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 03/05/2006, 04h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo