Tensorflow l'erreur quadratique moyenne de la perte de la fonction
J'ai vu un peu différente de l'erreur quadratique moyenne de la perte des fonctions dans les différents postes pour les modèles de régression dans Tensorflow:
loss = tf.reduce_sum(tf.pow(prediction - Y,2))/(n_instances)
loss = tf.reduce_mean(tf.squared_difference(prediction, Y))
loss = tf.nn.l2_loss(prediction - Y)
Quelles sont les différences entre ces?
1-er et 2-ème faire la même chose en théorie, 3-rd est multipliée par une constante
Un moyen de plus pour calculer le MSE (équivalent à votre 1er et 2ème méthode): tf.les pertes.mean_squared_error
Un moyen de plus pour calculer le MSE (équivalent à votre 1er et 2ème méthode): tf.les pertes.mean_squared_error
OriginalL'auteur Nitro | 2016-12-27
Vous devez vous connecter pour publier un commentaire.
Je dirais que la troisième équation est différente, tandis que la 1ère et de la 2ème sont formellement les mêmes, mais se comportent différemment en raison de numérique préoccupations.
Je pense que la 3ème équation (à l'aide de
l2_loss
) est tout simplement rentrer 1/2 du carré de la norme Euclidienne, qui est la somme de l'élément-sage de la place de l'entrée, qui estx=prediction-Y
. Vous n'êtes pas en divisant par le nombre d'échantillons n'importe où. Ainsi, si vous avez un très grand nombre d'échantillons, le calcul peut déborder (retour Inf).Les deux autres sont formellement les mêmes, le calcul de la moyenne de l'élément-sage au carré
x
tenseur. Cependant, bien que la documentation ne précise pas explicitement, il est très probable quereduce_mean
utilise un algorithme adapté pour éviter tout débordement avec un très grand nombre d'échantillons. En d'autres termes, il ne devrait pas essayer de la somme de tout premier et puis diviser par N, mais utiliser une sorte de roulement de dire qui peut s'adapter à un nombre arbitraire d'échantillons sans nécessairement causer un dépassement de capacité.OriginalL'auteur Javier Martín
La première et la deuxième perte des fonctions de calculer la même chose, mais d'une manière légèrement différente. La troisième fonction calculer quelque chose de complètement différent. Vous pouvez voir ceci en exécutant ce code:
Maintenant, vous pouvez vérifier que le 1-er et 2 nd calcule la même chose (en théorie), en remarquant que
tf.pow(a - b, 2)
est le même quetf.squared_difference(a - b, 2)
. Aussireduce_mean
est le même quereduce_sum /number_of_element
. Le truc, c'est que les ordinateurs ne peuvent pas calculer exactement. Pour voir ce que instabilités numériques pouvez faire pour vos calculs de prendre un coup d'oeil à ceci:Il est facile de voir que la réponse devrait être de 1, mais vous obtiendrez quelque chose comme ceci:
[1.0, 0.26843545]
.Concernant votre dernière fonction, la documentation dit que:
Donc si vous le voulez pour calculer la même chose (en théorie) que le premier, vous avez besoin d'une échelle appropriée:
OriginalL'auteur Salvador Dali