tutorial redes reconocimiento neuronales libreria imagenes example español clasificador python machine-learning keras data-science

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.