Pelo que entendi o gráfico deve ter valores de treino/validação semelhantes, não necessariamente precisam ser iguais, se estiverem distintos irão gerar under/over fit, correto?
Um dos pontos que tenho dúvida é em relação às imagens de teste, uma vez que as imagens de treino tiveram seus valores subdivididos em 255.
As imagens de teste não deveriam ter a mesma normalização?
É correto realizar os ajustes sem normalizar a base de validação?
Ao colocar o algoritmo em ação, o algoritmo não deve primeiramente normalizar imagens para tentar identificá-las, dado que ele foi treinado desta forma?
Realizando a mesma normalização nos testes pude notar que o modelo se ajusta entre o teste e a validação com apenas 3 épocas, e partir disso o modelo evolui lentamente.
Gerar um modelo "Super treinado" com 500 épocas não seria também uma forma de Overfit ou enquanto o treino e validação estiverem melhorando eu posso manter o processo pois o treino traz resultados positivos para a validação?
Link da Imagem do resultado obtido pelo histórico.
Normalizando as imagens:
imagens_treino = imagens_treino / float(255)
imagens_teste = imagens_teste / float(255)
Criando e compilando o modelo:
modelo = keras.Sequential([
keras.layers.Flatten(input_shape = (28, 28)),
keras.layers.Dense(256, activation = tensorflow.nn.relu),
keras.layers.Dense(10, activation = tensorflow.nn.softmax)
])
modelo.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
Ajustando o modelo ao treino:
historico = modelo.fit(imagens_treino, identificacoes_treino, epochs = 10, validation_split = 0.2)
Gerando o gráfico:
fig, axs = plt.subplots(1, 2, figsize=(14,6))
axs[0].plot(historico.history['accuracy'])
axs[0].plot(historico.history['val_accuracy'])
axs[0].set_title('Acurácia por épocas')
axs[0].set_xlabel('Épocas')
axs[0].set_ylabel('Acurácia')
axs[0].legend(['treino','validação'])
axs[1].plot(historico.history['loss'])
axs[1].plot(historico.history['val_loss'])
axs[1].set_title('Perda por épocas')
axs[1].set_xlabel('Épocas')
axs[1].set_ylabel('Perda')
axs[1].legend(['treino','validação'])
fig.savefig('modelfit.png')