Exemplos de otimização e ajuste do modelo do TensorFlow para aprendizado profundo

Nos últimos anos, o aprendizado profundo se desenvolveu rapidamente como uma tecnologia. Mais e mais soluções de inteligência artificial usam o aprendizado profundo como tecnologia básica. No entanto, construir um modelo de aprendizado profundo não é uma tarefa fácil. Para obter precisão e eficiência satisfatórias, geralmente leva semanas para otimizar o modelo.
A otimização do modelo geralmente inclui dois níveis: a própria estrutura da rede e os parâmetros de treinamento. A estrutura da rede inclui principalmente o número de camadas, nós, pesos e funções de ativação. Os parâmetros de treinamento incluem época, tamanho do lote, taxa de aprendizado, custo funções, normalização, regularização e otimização.

O aprendizado profundo é um subconjunto do aprendizado de máquina. O aprendizado profundo é principalmente a construção e o uso de modelos de redes neurais. As redes neurais geralmente têm três ou mais camadas. As redes neurais simulam o processamento de dados e o processo de tomada de decisão do cérebro humano. O aprendizado profundo é usado no processamento de linguagem natural (reconhecimento e síntese de linguagem), reconhecimento de imagem, direção autônoma e outros campos ganharam aplicações comerciais.

Ao abordar os problemas a serem tratados no aprendizado profundo, o processo de treinamento geralmente é o seguinte:
1. Construir um conjunto de dados de treinamento rotulado de acordo com o objeto do problema de processamento (correspondência um-para-um de entrada e saída);
2. De acordo com experiência (baseada em papel ou com base na intuição, etc.) para construir uma rede neural (TensorFlow, Keras, etc. estão todos disponíveis); 3.
Os pesos e deslocamentos (pesos e viés) de cada nó na rede construída são inicializado com valores aleatórios;
4. De acordo com a relação saída-entrada marcada, minimize o erro de previsão do modelo
5. Ajuste o peso e o valor de deslocamento de cada nó da rede neural de acordo com o erro de previsão;
6. Ajuste os parâmetros do modelo, incluindo camada, nó e outros parâmetros de treinamento para otimizar o modelo;
7. Salve o modelo treinado e estabeleça o raciocínio de implantação

A otimização do modelo pode ser feita a partir dos dois aspectos dos resultados de inferência (cálculo direto) e metas de treinamento. O objetivo da inferência é obter a maior precisão possível com o menor custo de cálculo possível. A otimização do processo de treinamento inclui o tempo de treinamento ( menos iterações) ), evite armadilhas de treinamento (gradientes desaparecendo e explodindo) e superajuste.

Processo de ajuste de aprendizado profundo

Preparação antes da afinação

No início do ajuste, um objetivo razoável (precisão e eficiência) deve ser definido e, em seguida, um conjunto de dados de treinamento apropriado deve ser organizado. A adequação aqui se refere aos dados relativamente equilibrados de várias amostras para o problema de destino e o conjunto de dados pode maximizar Cobrindo a cena de destino, faça um conjunto de teste da cena de destino.

Processo de ajuste

Os parâmetros ajustáveis ​​incluem as duas categorias a seguir,

  • Arquitetura do modelo de rede, número de camadas e seus relacionamentos em cascata, tipos de nó, pesos e funções de ativação, etc.
  • Parâmetros de treinamento, incluindo épocas e lotes, normalização e regularização,
    no processo de ajuste, o otimizador seleciona um ajuste de parâmetro de duas categorias por vez e seleciona um conjunto de parâmetros adequados de acordo com sua própria compreensão e experiência. Selecione um conjunto, como para tamanho do lote, você pode escolher o tamanho do lote 32, 64, 128 e 256 como um grupo de comparações e, para funções de ativação, pode escolher sigmoid, tanh, relu, elu, softmax, etc. como um grupo de comparações e, em seguida, use o mesmo conjunto de dados e conjunto de validação para treinar o modelo e, em seguida, use o conjunto de teste para comparar o impacto de diferentes seleções de parâmetros nos resultados e, em seguida, pegue os parâmetros que têm um grande impacto na precisão e no desempenho em um única etapa como objeto de pesquisa, semelhante a um único parâmetro, e ajustar a etapa anterior ao mesmo tempo com base na experiência Para avaliar o impacto de vários parâmetros que têm grande influência nos resultados do modelo e, finalmente, usar diferentes conjuntos de teste para testar os resultados e selecionar o modelo obtido ajustando o conjunto de parâmetros com o melhor efeito.

Estrutura básica do modelo

O site oficial do TensorFlow recomenda que, ao construir um modelo, comece com um simples e aumente gradualmente a complexidade do modelo, o que ajuda a iterar rapidamente o modelo. Aqui tomamos o Mnist como exemplo para mostrar o processo de otimização de treinamento. Embora o site oficial do keras dê um exemplo de um modelo baseado em uma rede convolucional, quando o exemplo no site oficial itera para 12 épocas, a precisão no conjunto de treinamento é:

Epoch 12/15
237/422 [===============>..............] - ETA: 7s - loss: 0.0398 - accuracy: 0.9877

Este é o resultado original fornecido no site oficial e haverá pequenas diferenças em diferentes processos de treinamento.
Aqui, a rede totalmente conectada sugerida pelo site oficial é usada como modelo inicial. Para simplificar o código de treinamento, o código geral é usado como uma função python independente e o ajuste é implementado em diferentes funções.
O código adota a ideia de design de estrutura. Para o código relacionado ao modelo principal, consulte Base_model. Os diferentes parâmetros testados são realizados pela configuração do loop for. Essa estrutura de código ajuda a estabelecer uma maneira de pensar clara e estruturada. Veja o endereço de download:

Link de download do código- fonte deste blog

Ajuste de hiperparâmetros

Tamanhos de época e lote

from Base_model import *

#--------------------------------------
#Epoch and batch size comparision
#--------------------------------------
accuracy_measures = {
    
    }
for batch_size in range(16, 128, 16):
    # Load default configuration
    model_config = base_model_config()
    # Acquire and process input data
    X_train, Y_train, X_test, Y_test = get_data()

    # set epoch to 20
    model_config["EPOCHS"] = 12
    # Set batch size to experiment value
    model_config["BATCH_SIZE"] = batch_size
    model_name = "Batch-Size-" + str(batch_size)
    history = create_and_run_model(model_config, X_train, Y_train, model_name)

    accuracy_measures[model_name] = history.history["accuracy"]

plot_graph(accuracy_measures, "Compare Batch Size and Epoch")

Link de download do código- fonte deste blog

Os resultados do teste de 12 épocas são os seguintes

tamanho do batch precisão (12 épocas)
16 0,9785208106040955
32 0,9809791445732117
48 0,9815000295639038
64 0,981166660785675
80 0,979812502861023
96 0,9786666631698608
112 0,9773333072662354
Adicione uma descrição da imagem
Pode ser visto na tabela e na figura que o tamanho do lote é igual a 48 e a precisão é maior quando a época está acima de 10.

Ajustando o número de camadas

número de camadas precisão (12 épocas)
2 (camada não oculta) 0,9753124713897705
3 0,9770416617393494
4 0,9742291569709778
5 0,968708336353302
6 0,9672499895095825
Adicione uma descrição da imagem
Com isso, podemos ver que quando o número de camadas é igual ou maior que a seção anterior, a precisão não é tão alta quanto o teste da seção anterior. Além disso, o número de camadas não é tão bom quanto possível. É por isso que o site oficial recomenda começar com um modelo simples.O motivo do começo, é claro, também pode ser usado para reproduzir e lidar com o problema-alvo dos trabalhos existentes.

Diferentes camadas de ajuste de nós

Como o tamanho dos nós afeta a precisão do modelo, é necessário comparar diferentes nós. A tabela a seguir é uma comparação das três camadas

número de nós precisão (12 épocas)
8 0,9283124804496765
16 0,9551041722297668
24 0,9686458110809326
32 0,9765833616256714

Adicione uma descrição da imagem
Os nós do modelo padrão são 32 e 64 respectivamente, e aqui ambas as camadas são 32, e o intervalo de teste de nós deve ser expandido.

função de ativação

Existem 10 funções de ativação comuns, aqui é simples, apenas relu, sigmoid e tanh são listados para comparação

função de ativação precisão
retomar 0,9792708158493042
sigmoide 0,971750020980835
duvidoso 0,9769999980926514
Adicione uma descrição da imagem

### Impacto de inicialização de pesos

Inicialização de pesos precisão
normal aleatório 0,9790416955947876
zeros 0,11395833641290665
uns 0,11437500268220901
uniforme aleatório 0,9780833125114441

Comparação de inicialização de peso

Ajuste do parâmetro de gradiente de treinamento

normalização em lote

normalização 12 época
com 0,9826458096504211
Nenhum 0,9813958406448364

Adicione uma descrição da imagem

Ajuste de Otimizadores

O otimizador também afeta a convergência da propagação do gradiente reverso. Diferentes otimizadores têm diferentes velocidades de convergência e desempenhos.

otimizador precisão
sgd 0,9803333282470703
rmsplug 0,9818333387374878
Adão 0,9816458225250244
dose 0,8760625123977661

Adicione uma descrição da imagem

Ajuste da taxa de aprendizado

Taxas de aprendizado diferentes têm diferenças na velocidade e na precisão da convergência. Taxas de aprendizado maiores tendem a ter velocidades de convergência mais rápidas no início, mas muitas vezes falham em alcançar a solução ideal. Portanto, taxas de aprendizado dinâmicas são frequentemente usadas. A implementação do LearningRateScheduler é fornecida em keras Esta função .
Adicione uma descrição da imagem

controle de sobreajuste

Regularização

Os métodos regulares são L1, L2 e L1_L2
Adicione uma descrição da imagem

cair fora

Adicione uma descrição da imagem

Link de download do código- fonte deste blog

Além disso, existem combinações de diferentes OPs (convolução, LSTM, GRU), diferentes estruturas de rede (Resnet, Densenet, mobileNet, VGG) etc., além de operações como aprimoramento de dados de treinamento, embaralhamento e perda de treinamento.

Acho que você gosta

Origin blog.csdn.net/shichaog/article/details/125128321
Recomendado
Clasificación