Profondeur d'apprentissage des causes de perte de nanore
Peut-être trop général une question, mais quelqu'un peut-il expliquer ce que serait la cause d'un Réseau de Neurones à Convolution à diverger?
Détails:
Je suis en utilisant Tensorflow de iris_training modèle avec certains de mes propres données et reçois
ERREUR:tensorflow:Modèle divergé avec perte = NaN.
Traceback...
tensorflow.contrib.apprendre.python.apprendre.les moniteurs.NanLossDuringTrainingError: NaN perte au cours de la formation.
Traceback origine avec ligne:
tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
hidden_units=[300, 300, 300],
#optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.001, l1_regularization_strength=0.00001),
n_classes=11,
model_dir="/tmp/iris_model")
J'ai essayé le réglage de l'optimiseur, à l'aide d'un zéro pour l'apprentissage de taux, et utilisant l'optimiseur. Des idées dans les couches du réseau, la taille des données, etc est apprécié.
source d'informationauteur Zroach
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de choses que j'ai vu faire un modèle divergent.
Trop haut, au taux d'apprentissage. Vous pouvez dire si c'est le cas si la perte commence à augmenter, puis diverge à l'infini.
Je ne suis pas familiers avec le DNNClassifier, mais je devine qu'il utilise les catégorique de la croix de l'entropie de la fonction de coût. Il s'agit de prendre le journal de la prédiction, qui diverge selon la prédiction se rapproche de zéro. C'est pourquoi les gens l'habitude d'ajouter un petit epsilon de la valeur de la prédiction pour empêcher cette divergence. Je suppose que le DNNClassifier probablement ce soit le cas ou utilise le tensorflow de l'opp. Probablement pas le problème.
Autres numérique des problèmes de stabilité peuvent exister comme une division par zéro, d'où l'ajout de l'epsilon peut vous aider. Une autre, moins évidente si la racine carrée de l'oms dérivés peuvent diverger si pas correctement simplifiée lorsque l'on traite avec précision finie de nombres. Encore une fois je doute que cela soit le problème dans le cas de la DNNClassifier.
Vous pouvez avoir un problème avec les données d'entrée. Essayez d'appeler
assert not np.any(np.isnan(x))
sur les données d'entrée assurez-vous que vous n'êtes pas l'introduction de la nan. Assurez-vous également que toutes les valeurs sont valides. Enfin, assurez-vous que les données sont correctement normalisé. Vous souhaitez probablement les pixels dans l'intervalle [-1, 1], [0, 255].Les étiquettes doivent être dans le domaine de la perte de la fonction, donc si à l'aide d'une échelle logarithmique de base de la perte de la fonction de toutes les étiquettes doivent être non négatif (comme indiqué par evan pu et les commentaires ci-dessous).
Si vous êtes de formation pour les croix, l'entropie, vous voulez ajouter un petit nombre comme 1e-8 à votre sortie de probabilité.
Car log(0) est l'infini négatif, lorsque votre modèle insuffisamment formés à la sortie de la distribution très asymétrique, par exemple, dire que je suis en train de faire un 4 de sortie de classe, au début mon probabilité ressemble
mais vers la fin, la probabilité sera probablement ressembler à
Et vous prenez une croix de l'entropie de cette distribution tout va exploser. La solution est de artifitially ajouter un petit nombre de toutes les conditions pour l'en empêcher.
Si à l'aide de nombres entiers, comme les cibles, permet de s'assurer qu'ils ne sont pas symétriques à 0.
I. e., ne pas utiliser les classes -1, 0, 1. Utiliser à la place de 0, 1, 2.
Si vous souhaitez obtenir plus d'information sur l'erreur et si l'erreur se produit dans les premières itérations, je vous suggère de faire l'expérience de l'UC en mode (pas de Gpu). Le message d'erreur sera beaucoup plus spécifique.
Source: https://github.com/tensorflow/tensor2tensor/issues/574