web-dev-qa-db-fra.com

Quelle fonction définit la précision dans Keras lorsque la perte est une erreur quadratique moyenne (MSE)?

Comment est définie la précision lorsque la fonction de perte est une erreur quadratique moyenne? Est-ce que signifie le pourcentage d'erreur absolu ?

Le modèle que j'utilise a une activation de sortie linéaire et est compilé avec loss= mean_squared_error

model.add(Dense(1))
model.add(Activation('linear'))  # number

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

et la sortie ressemble à ceci:

Epoch 99/100
1000/1000 [==============================] - 687s 687ms/step - loss: 0.0463 - acc: 0.9689 - val_loss: 3.7303 - val_acc: 0.3250
Epoch 100/100
1000/1000 [==============================] - 688s 688ms/step - loss: 0.0424 - acc: 0.9740 - val_loss: 3.4221 - val_acc: 0.3701

Alors qu'est-ce que par exemple val_acc: 0,3250 moyenne? Mean_squared_error devrait être un scalaire et non un pourcentage - ne devrait-il pas? Val_acc - erreur au carré moyen, erreur en pourcentage moyenne ou autre fonction?

De la définition de MSE sur wikipedia: https://en.wikipedia.org/wiki/Mean_squared_error

Le MSE est une mesure de la qualité d'un estimateur - il est toujours non négatif, et les valeurs proches de zéro sont meilleures.

Est-ce que cela signifie qu'une valeur de val_acc: 0.0 est meilleure que val_acc: 0.325?

edit: plus d'exemples de résultats de métrique de précision lorsque je m'entraîne - où la précision augmente lorsque je m'entraîne davantage. Alors que la fonction de perte - mse devrait diminuer. Exactitude est-elle bien définie pour mse - et comment est-elle définie dans Keras?

lAllocator: After 14014 get requests, put_count=14032 evicted_count=1000 eviction_rate=0.0712657 and unsatisfied allocation rate=0.071714
1000/1000 [==============================] - 453s 453ms/step - loss: 17.4875 - acc: 0.1443 - val_loss: 98.0973 - val_acc: 0.0333
Epoch 2/100
1000/1000 [==============================] - 443s 443ms/step - loss: 6.6793 - acc: 0.1973 - val_loss: 11.9101 - val_acc: 0.1500
Epoch 3/100
1000/1000 [==============================] - 444s 444ms/step - loss: 6.3867 - acc: 0.1980 - val_loss: 6.8647 - val_acc: 0.1667
Epoch 4/100
1000/1000 [==============================] - 445s 445ms/step - loss: 5.4062 - acc: 0.2255 - val_loss: 5.6029 - val_acc: 0.1600
Epoch 5/100
783/1000 [======================>.......] - ETA: 1:36 - loss: 5.0148 - acc: 0.2306
5
Endre Moen

La fonction de perte (Erreur quadratique moyenne dans ce cas) est utilisée pour indiquer l’écart entre vos prévisions et les valeurs cibles. Lors de la phase d’entraînement, les poids sont mis à jour en fonction de cette quantité. Si vous rencontrez un problème de classification, il est assez courant de définir une métrique supplémentaire appelée précision. Il surveille dans combien de cas la classe correcte a été prédite. Ceci est exprimé en pourcentage. Par conséquent, une valeur de 0,0 signifie aucune décision correcte et 1,0 uniquement des décisions correctes ... Pendant que votre réseau est en formation, la perte diminue et la précision augmente généralement.

Notez que contrairement à la perte, la précision n'est généralement pas utilisée pour mettre à jour les paramètres de votre réseau. Cela aide à surveiller les progrès d'apprentissage et les performances actuelles du réseau.

2
BGraf

@desertnaut a dit très clairement

Considérons les deux morceaux de code suivants

compiler le code

code binary_accuracy

def binary_accuracy(y_true, y_pred):
    return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

Vos étiquettes doivent être entières , Parce que keras ne arrondit pas y_true, et vous obtenez une grande précision ...

1
minghigh