web-dev-qa-db-fra.com

Comment savoir quel modèle Keras est le meilleur?

Je ne comprends pas quelle précision dans la sortie utiliser pour comparer mes 2 modèles Keras pour voir lequel est le meilleur.

Dois-je utiliser le "acc" (à partir des données de formation?) Ou le "val acc" (à partir des données de validation?)?

Il existe différents accès et différents accès pour chaque époque. Comment puis-je connaître l'acc ou la val acc pour mon modèle dans son ensemble? Dois-je faire la moyenne de tous les époques accs ou val accs pour trouver l'acc ou val val du modèle dans son ensemble?

sortie modèle 1

Train on 970 samples, validate on 243 samples
Epoch 1/20
0s - loss: 0.1708 - acc: 0.7990 - val_loss: 0.2143 - val_acc: 0.7325
Epoch 2/20
0s - loss: 0.1633 - acc: 0.8021 - val_loss: 0.2295 - val_acc: 0.7325
Epoch 3/20
0s - loss: 0.1657 - acc: 0.7938 - val_loss: 0.2243 - val_acc: 0.7737
Epoch 4/20
0s - loss: 0.1847 - acc: 0.7969 - val_loss: 0.2253 - val_acc: 0.7490
Epoch 5/20
0s - loss: 0.1771 - acc: 0.8062 - val_loss: 0.2402 - val_acc: 0.7407
Epoch 6/20
0s - loss: 0.1789 - acc: 0.8021 - val_loss: 0.2431 - val_acc: 0.7407
Epoch 7/20
0s - loss: 0.1789 - acc: 0.8031 - val_loss: 0.2227 - val_acc: 0.7778
Epoch 8/20
0s - loss: 0.1810 - acc: 0.8010 - val_loss: 0.2438 - val_acc: 0.7449
Epoch 9/20
0s - loss: 0.1711 - acc: 0.8134 - val_loss: 0.2365 - val_acc: 0.7490
Epoch 10/20
0s - loss: 0.1852 - acc: 0.7959 - val_loss: 0.2423 - val_acc: 0.7449
Epoch 11/20
0s - loss: 0.1889 - acc: 0.7866 - val_loss: 0.2523 - val_acc: 0.7366
Epoch 12/20
0s - loss: 0.1838 - acc: 0.8021 - val_loss: 0.2563 - val_acc: 0.7407
Epoch 13/20
0s - loss: 0.1835 - acc: 0.8041 - val_loss: 0.2560 - val_acc: 0.7325
Epoch 14/20
0s - loss: 0.1868 - acc: 0.8031 - val_loss: 0.2573 - val_acc: 0.7407
Epoch 15/20
0s - loss: 0.1829 - acc: 0.8072 - val_loss: 0.2581 - val_acc: 0.7407
Epoch 16/20
0s - loss: 0.1878 - acc: 0.8062 - val_loss: 0.2589 - val_acc: 0.7407
Epoch 17/20
0s - loss: 0.1833 - acc: 0.8072 - val_loss: 0.2613 - val_acc: 0.7366
Epoch 18/20
0s - loss: 0.1837 - acc: 0.8113 - val_loss: 0.2605 - val_acc: 0.7325
Epoch 19/20
0s - loss: 0.1906 - acc: 0.8010 - val_loss: 0.2555 - val_acc: 0.7407
Epoch 20/20
0s - loss: 0.1884 - acc: 0.8062 - val_loss: 0.2542 - val_acc: 0.7449

sortie modèle 2

Train on 970 samples, validate on 243 samples
Epoch 1/20
0s - loss: 0.1735 - acc: 0.7876 - val_loss: 0.2386 - val_acc: 0.6667
Epoch 2/20
0s - loss: 0.1733 - acc: 0.7825 - val_loss: 0.1894 - val_acc: 0.7449
Epoch 3/20
0s - loss: 0.1781 - acc: 0.7856 - val_loss: 0.2028 - val_acc: 0.7407
Epoch 4/20
0s - loss: 0.1717 - acc: 0.8021 - val_loss: 0.2545 - val_acc: 0.7119
Epoch 5/20
0s - loss: 0.1757 - acc: 0.8052 - val_loss: 0.2252 - val_acc: 0.7202
Epoch 6/20
0s - loss: 0.1776 - acc: 0.8093 - val_loss: 0.2449 - val_acc: 0.7490
Epoch 7/20
0s - loss: 0.1833 - acc: 0.7897 - val_loss: 0.2272 - val_acc: 0.7572
Epoch 8/20
0s - loss: 0.1827 - acc: 0.7928 - val_loss: 0.2376 - val_acc: 0.7531
Epoch 9/20
0s - loss: 0.1795 - acc: 0.8062 - val_loss: 0.2445 - val_acc: 0.7490
Epoch 10/20
0s - loss: 0.1746 - acc: 0.8103 - val_loss: 0.2491 - val_acc: 0.7449
Epoch 11/20
0s - loss: 0.1831 - acc: 0.8082 - val_loss: 0.2477 - val_acc: 0.7449
Epoch 12/20
0s - loss: 0.1831 - acc: 0.8113 - val_loss: 0.2496 - val_acc: 0.7490
Epoch 13/20
0s - loss: 0.1920 - acc: 0.8000 - val_loss: 0.2459 - val_acc: 0.7449
Epoch 14/20
0s - loss: 0.1945 - acc: 0.7928 - val_loss: 0.2446 - val_acc: 0.7490
Epoch 15/20
0s - loss: 0.1852 - acc: 0.7990 - val_loss: 0.2459 - val_acc: 0.7449
Epoch 16/20
0s - loss: 0.1800 - acc: 0.8062 - val_loss: 0.2495 - val_acc: 0.7449
Epoch 17/20
0s - loss: 0.1891 - acc: 0.8000 - val_loss: 0.2469 - val_acc: 0.7449
Epoch 18/20
0s - loss: 0.1891 - acc: 0.8041 - val_loss: 0.2467 - val_acc: 0.7531
Epoch 19/20
0s - loss: 0.1853 - acc: 0.8072 - val_loss: 0.2511 - val_acc: 0.7449
Epoch 20/20
0s - loss: 0.1905 - acc: 0.8062 - val_loss: 0.2460 - val_acc: 0.7531
41
pr338

Dois-je utiliser le "acc" (à partir des données de formation?) Ou le "val acc" (à partir des données de validation?)?

Si vous souhaitez estimer la capacité de votre modèle à se généraliser à de nouvelles données (ce qui est probablement ce que vous voulez faire), vous examinez la précision de la validation, car la division de validation ne contient que des données que le modèle ne voit jamais pendant la formation et à cet effet, on ne peut pas simplement mémoriser.

Si la précision de vos données d'entraînement ("acc") continue de s'améliorer alors que la précision de vos données de validation ("val_acc") empire, vous êtes probablement dans une situation sur-ajustement , c'est-à-dire que votre modèle commence à mémoriser simplement les données .

Il existe différents accès et différents accès pour chaque époque. Comment puis-je connaître l'acc ou la val acc pour mon modèle dans son ensemble? Dois-je faire la moyenne de tous les époques accs ou val accs pour trouver l'acc ou val val du modèle dans son ensemble?

Chaque époque est une formation exécutée sur toutes vos données. Pendant cette exécution, les paramètres de votre modèle sont ajustés en fonction de votre fonction de perte. Le résultat est un ensemble de paramètres qui ont une certaine capacité à se généraliser à de nouvelles données. Cette capacité se reflète dans la précision de la validation. Considérez donc chaque époque comme son propre modèle, qui peut s'améliorer ou empirer s'il est formé pour une autre époque. L'amélioration ou la détérioration est jugée par le changement de précision de validation (meilleur = précision de validation augmentée). Choisissez donc le modèle de l'époque avec la plus grande précision de validation. Ne faites pas la moyenne des précisions sur différentes époques, cela n'aurait pas beaucoup de sens. Vous pouvez utiliser le rappel Keras ModelCheckpoint pour enregistrer automatiquement le modèle avec la plus grande précision de validation (voir documentation des rappels ).

La précision la plus élevée dans le modèle 1 est 0.7737 et le plus élevé du modèle 2 est 0.7572. Par conséquent, vous devriez mieux voir le modèle 1 (à l'époque 3). Bien qu'il soit possible que le 0.7737 n'était qu'une valeur aberrante aléatoire.

60
aleju

Vous devez taper sur la diminution de val_loss ou sur l'augmentation de val_acc, finalement cela n'a pas beaucoup d'importance. Les différences se situent bien dans les erreurs aléatoires/d'arrondi.

Dans la pratique, la perte de formation peut chuter de manière significative en raison d'un sur-ajustement, c'est pourquoi vous souhaitez examiner la perte de validation.

Dans votre cas, vous pouvez voir que votre perte d'entraînement ne baisse pas - ce qui signifie que vous n'apprenez rien après chaque époque. Il semble qu'il n'y ait rien à apprendre dans ce modèle, à part une valeur d'ajustement ou de coupure linéaire comme triviale.

De plus, lorsque vous n'apprenez rien, ou une chose linéaire triviale, vous devriez avoir une performance similaire sur la formation et la validation (l'apprentissage trivial est toujours généralisable). Vous devriez probablement mélanger vos données avant d'utiliser la fonction validation_split.

5
Erik Aronesty