Como saber qual o modelo Keras é melhor?

votos
32

Eu não entendo qual a precisão na saída para usar para comparar os meus 2 modelos Keras para ver qual é o melhor.

Eu uso o acc (a partir dos dados de treinamento?) Um ou o acc val (a partir dos dados de validação?) Um?

Existem diferentes ACCs e val ACCS para cada época. Como eu sei o acc ou val acc para o meu modelo como um todo? Eu média de todos os ACCS épocas ou ACCS val para encontrar o acc ou val acc do modelo como um todo?

Modelo 1 Output

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 Saída

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
Publicado 10/01/2016 em 02:23
fonte usuário
Em outras línguas...                            


2 respostas

votos
42

Eu uso o "acc" (a partir dos dados de treinamento?) Um ou o "acc val" (a partir dos dados de validação?) Um?

Se você quiser estimar a capacidade de seu modelo para generalizar para novos dados (que é provavelmente o que você quer fazer), então você olha para a precisão de validação, porque a divisão de validação contém apenas dados que o modelo nunca vê durante o treinamento e mesmos não podem simplesmente memorizar.

Se a sua precisão dos dados de treinamento ( "ACC") continua melhorando, enquanto a sua precisão dos dados de validação ( "val_acc") fica pior, você é provável em uma overfitting situação, ou seja, o modelo começa a basicamente apenas memorizar os dados.

Existem diferentes ACCs e val ACCS para cada época. Como eu sei o acc ou val acc para o meu modelo como um todo? Eu média de todos os ACCS épocas ou ACCS val para encontrar o acc ou val acc do modelo como um todo?

Cada época é um treinamento atropelado todos os seus dados. Durante esse prazo os parâmetros do seu modelo são ajustados de acordo com a sua função de perda. O resultado é um conjunto de parâmetros que têm uma certa capacidade de generalizar para novos dados. Essa capacidade é refletida pela precisão de validação. Então, acho que de todas as épocas, como o seu próprio modelo, que pode ficar melhor ou pior se ele é treinado para outra época. Se ele ficou melhor ou pior é julgado pela mudança na precisão de validação (melhor = precisão validação aumentado). Portanto escolher o modelo da época com a maior precisão validação. Não média das precisões sobre diferentes épocas, que não faria muito sentido. Você pode usar o callback Keras ModelCheckpointpara salvar automaticamente o modelo com a maior precisão de validação (ver documentação retornos de chamada ).

A maior precisão no modelo 1 é 0.7737e o mais alto no modelo 2 é 0.7572. Portanto, você deve ver modelo 1 (na época 3) como melhor. Embora seja possível que o 0.7737era apenas um outlier aleatória.

Respondeu 10/01/2016 em 10:05
fonte usuário

votos
2

Você precisa de chave na diminuição val_loss ou aumentar val_acc, em última análise, não importa muito. As diferenças são bem dentro de erros aleatórios / arredondamento.

Na prática, a perda de treinamento pode cair significativamente devido ao excesso de encaixe, que é por isso que você quer olhar para a perda de validação.

No seu caso, você pode ver que a sua perda de treinamento não está caindo - o que significa que você está aprendendo nada após cada época. Que pareça não há nada para aprender neste modelo, além de algum ajuste ou cutoff valor linear semelhante trivial.

Além disso, quando se aprende nada, ou uma coisa linear trivial, você deve um desempenho semelhante na formação e validação (aprendizagem trivial é sempre generalizável). Você provavelmente deve embaralhar seus dados antes de usar o recurso validation_split.

Respondeu 01/04/2016 em 14:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more