1
resposta

Como identificar o fit ideal dos meus treinos e testes?

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')
1 resposta

Olá Felipe.

Você está correto quanto a normalizar os dados de teste também, comento um pouco sobre isso nesse tópico.

Bons Estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software