2017-06-25 4 views
0

Je suis totalement nouveau à NN et je veux classer les presque 6000 images qui appartiennent à différents jeux (recueillies par IR). J'ai utilisé les étapes présentées dans le lien suivant, mais j'ai la même précision d'entraînement à chaque tour. quelques informations sur l'architecture NN: 2 couches convloutional, activation et pooling. Type d'activation: relu, Le nombre de filtres dans les première et deuxième couches est de 30 et 70 respectivement. 2 couche entièrement connectée avec 500 et 2 couches cachées respectivement. http://firsttimeprogrammer.blogspot.de/2016/07/image-recognition-in-r-using.htmlUnchanges précision de formation dans le réseau de neurones convolutionnels en utilisant MXnet

+0

Lorsque vous utilisez mx.set.seed (100), il rend le processus déterministe. –

+0

S'il vous plaît partager votre code –

+0

Qu'entendez-vous par "Je reçois la même précision d'entraînement dans chaque tour"? Est-ce que vous vous entraînez avec plusieurs époques? Si vous réinitialisez le réseau à chaque fois, vous obtiendrez la même précision globale. Si vous continuez à former le modèle, les premières époques devraient vous donner de meilleurs résultats. – Guy

Répondre

1

J'ai eu un problème similaire, mais pour la régression. Après avoir essayé plusieurs choses (optimiseurs différents, variations de couches et de nœuds, taux d'apprentissage, itérations, etc.), j'ai trouvé que la façon dont les valeurs initiales sont données aide beaucoup. Par exemple, j'ai utilisé un initialiseur -random avec une variance de 0,2 (initializer = mx.init.normal(0.2)). Je suis tombé sur cette valeur à partir de . Je vous recommande de le lire. [EDIT] Un extrait de la même,

Initialisation du poids. Inquiétude à propos de l'initialisation aléatoire des poids au début de l'apprentissage. Si vous êtes paresseux, il suffit généralement de faire quelque chose comme 0.02 * randn (num_params). Une valeur à cette échelle a tendance à fonctionner étonnamment bien sur de nombreux problèmes différents. Bien sûr, des valeurs plus petites (ou plus grandes) valent également la peine d'être essayées. Si cela ne fonctionne pas bien (disons que votre architecture de réseau de neurones est inhabituelle et/ou très profonde), alors vous devez initialiser chaque matrice de poids avec l'init_scale/sqrt (layer_width) * randn. Dans ce cas, init_scale doit être défini sur 0.1 ou 1, ou quelque chose comme ça. L'initialisation aléatoire est très importante pour les réseaux profonds et récurrents. Si vous ne comprenez pas bien, il semblerait que le réseau n'apprenne rien du tout. Mais nous savons que les réseaux de neurones apprennent une fois les conditions définies. Histoire amusante: les chercheurs ont cru, pendant de nombreuses années, que SGD ne pouvait pas entraîner les réseaux neuronaux profonds à partir d'initialisations aléatoires. Chaque fois qu'ils l'essaieraient, ça ne marcherait pas. Embarrassant, ils n'ont pas réussi parce qu'ils ont utilisé les «petits poids aléatoires» pour l'initialisation, ce qui fonctionne bien pour les filets peu profonds mais ne fonctionne tout simplement pas pour les filets profonds. Lorsque les filets sont profonds, les nombreuses matrices de poids se multiplient les unes les autres, de sorte que l'effet d'une échelle sous-optimale est amplifié. Mais si votre réseau est peu profond, vous pouvez vous permettre d'être moins prudent avec l'initialisation aléatoire, puisque SGD va juste trouver un moyen de le réparer. Vous êtes maintenant informé. Inquiétez-vous et prenez soin de votre initialisation. Essayez plusieurs types d'initialisation. Cet effort sera payant. Si le filet ne fonctionne pas du tout (c'est-à-dire qu'il ne «sort jamais du sol»), continuez à appliquer une pression à l'initialisation aléatoire. C'est ce qu'il faut faire.

http://yyue.blogspot.in/2015/01/a-brief-overview-of-deep-learning.html

+0

Pouvez-vous poster une citation complète et un résumé de l'information sur le lien, au cas où il serait mort? – gung

+1

Ajouté selon la demande. :) – benchWarmer