python - redes - ¿Cómo saber qué modelo de Keras es mejor?
tensorflow python (2)
¿Utilizo el "acc" (¿de los datos de entrenamiento?) Uno o el "val acc" (¿de los datos de validación?) Uno?
Si desea estimar la capacidad de su modelo para generalizar a nuevos datos (que es probablemente lo que desea hacer), entonces observa la precisión de la validación, porque la división de validación contiene solo datos que el modelo nunca ve durante el entrenamiento y por lo tanto, no puede simplemente memorizar.
Si la precisión de los datos de entrenamiento ("acc") sigue mejorando mientras la exactitud de los datos de validación ("val_acc") empeora, es probable que se encuentre en una situación de overfitting , es decir, su modelo comienza básicamente a memorizar los datos.
Hay diferentes accs y val accs para cada época. ¿Cómo sé el acc o val acc para mi modelo como un todo? ¿Promedí todas las épocas accs o val accs para encontrar el acc o val acc del modelo como un todo?
Cada época es un entrenamiento que se ejecuta sobre todos sus datos. Durante esa ejecución, los parámetros de su modelo se ajustan de acuerdo con su función de pérdida. El resultado es un conjunto de parámetros que tienen una cierta capacidad para generalizar a nuevos datos. Esa capacidad se refleja en la precisión de validación. Así que piense en cada época como su propio modelo, que puede mejorar o empeorar si está entrenado para otra época. Si se mejoró o empeoró se juzga por el cambio en la precisión de la validación (mejor = precisión de validación aumentada). Por lo tanto, elija el modelo de la época con la mayor precisión de validación. No promedie las precisiones sobre diferentes épocas, eso no tendría mucho sentido. Puede utilizar ModelCheckpoint
callback ModelCheckpoint
para guardar automáticamente el modelo con la mayor precisión de validación (ver la documentación de devolución de llamada ).
La precisión más alta en el modelo 1 es 0.7737
y la más alta en el modelo 2 es 0.7572
. Por lo tanto, debería ver el modelo 1 (en la época 3) como mejor. Aunque es posible que el 0.7737
fuera solo un valor atípico al azar.
No entiendo qué precisión en la salida usar para comparar mis 2 modelos de Keras para ver cuál es mejor.
¿Utilizo el "acc" (¿de los datos de entrenamiento?) Uno o el "val acc" (¿de los datos de validación?) Uno?
Hay diferentes accs y val accs para cada época. ¿Cómo sé el acc o val acc para mi modelo como un todo? ¿Promedí todas las épocas accs o val accs para encontrar el acc o val acc del modelo como un todo?
Modelo 1 Salida
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
Modelo 2 Salida
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
Debe presionar para disminuir val_loss o aumentar val_acc, al final no importa mucho. Las diferencias están dentro de los errores aleatorios / de redondeo.
En la práctica, la pérdida de entrenamiento puede disminuir significativamente debido al ajuste excesivo, razón por la cual desea ver la pérdida de validación.
En su caso, puede ver que su pérdida de entrenamiento no está disminuyendo, lo que significa que no está aprendiendo nada después de cada época. Parece que no hay nada que aprender en este modelo, aparte de algún ajuste trivial similar al lineal o valor de corte.
Además, cuando no se aprende nada, o una cosa lineal trivial, se debe tener un rendimiento similar en el entrenamiento y la validación (el aprendizaje trivial siempre se puede generalizar). Probablemente deba mezclar sus datos antes de usar la función validation_split.