Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Implementação de Rede Neural | Fundamentos do TensorFlow
Introdução ao TensorFlow
Seção 3. Capítulo 4
single

single

Implementação de Rede Neural

Deslize para mostrar o menu

Visão Geral de uma Rede Neural Básica

Você chegou a um estágio em que possui o conhecimento essencial de TensorFlow para criar redes neurais por conta própria. Embora a maioria das redes neurais do mundo real seja complexa e normalmente construída usando bibliotecas de alto nível como o Keras, construiremos uma rede básica utilizando ferramentas fundamentais do TensorFlow. Essa abordagem proporciona experiência prática com manipulação de tensores em baixo nível, ajudando a compreender os processos subjacentes.

Em cursos anteriores como Introdução às Redes Neurais, você deve se lembrar do tempo e esforço necessários para construir até mesmo uma rede neural simples, tratando cada neurônio individualmente.

single_neuron_calc

O TensorFlow simplifica significativamente esse processo. Ao utilizar tensores, é possível encapsular cálculos complexos, reduzindo a necessidade de codificação detalhada. A principal tarefa é configurar um pipeline sequencial de operações com tensores.

Aqui está um breve lembrete dos passos para iniciar o processo de treinamento de uma rede neural:

Preparação dos Dados e Criação do Modelo

A fase inicial do treinamento de uma rede neural envolve a preparação dos dados, abrangendo tanto os entradas quanto as saídas das quais a rede irá aprender. Além disso, os hiperparâmetros do modelo são definidos - estes são os parâmetros que permanecem constantes durante todo o processo de treinamento. Os pesos são inicializados, normalmente extraídos de uma distribuição normal, e os biases geralmente são definidos como zero.

Propagação Direta

Na propagação direta, cada camada da rede normalmente segue estes passos:

  1. Multiplicar a entrada da camada pelos seus pesos.
  2. Adicionar um viés ao resultado.
  3. Aplicar uma função de ativação a essa soma.
carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img

Em seguida, o loss pode ser calculado.

Propagação Reversa

O próximo passo é a propagação reversa, onde ajustamos os pesos e vieses com base em sua influência sobre o loss. Essa influência é representada pelo gradiente, que o Gradient Tape do TensorFlow calcula automaticamente. Atualizamos os pesos e vieses subtraindo o gradiente, escalado pela taxa de aprendizado.

carousel-imgcarousel-imgcarousel-img

Loop de Treinamento

Para treinar a rede neural de forma eficaz, os passos de treinamento são repetidos várias vezes enquanto se acompanha o desempenho do modelo. Idealmente, a perda deve diminuir ao longo das épocas.

Tarefa

Deslize para começar a programar

Criação de uma rede neural projetada para prever os resultados da operação XOR. A rede deve consistir em 2 neurônios de entrada, uma camada oculta com 2 neurônios e 1 neurônio de saída.

  1. Iniciar pela configuração dos pesos e vieses iniciais. Os pesos devem ser inicializados utilizando uma distribuição normal, e todos os vieses devem ser inicializados em zero. Utilize os hiperparâmetros input_size, hidden_size e output_size para definir os formatos adequados desses tensores.
  2. Utilizar um decorador de função para transformar a função train_step() em um grafo do TensorFlow.
  3. Realizar a propagação direta pelas camadas oculta e de saída da rede. Utilizar a função de ativação sigmoide.
  4. Determinar os gradientes para compreender como cada peso e viés impacta a perda. Certifique-se de que os gradientes sejam calculados na ordem correta, correspondente aos nomes das variáveis de saída.
  5. Modificar os pesos e vieses com base em seus respectivos gradientes. Incorporar o learning_rate nesse processo de ajuste para controlar a intensidade de cada atualização.

Solução

Descrição do Código
expand arrow

Preparação dos Dados

  • X_data: estes são os dados de entrada para a função XOR. É um array NumPy de formato (4, 2), representando as quatro combinações possíveis das entradas do XOR (0,0), (0,1), (1,0) e (1,1);
  • Y_data: este é o alvo de saída para cada combinação de entrada em X_data. Também é um array NumPy, mas de formato (4, 1), representando a saída do XOR para cada par de entrada.

Parâmetros da Rede

  • input_size: o tamanho da camada de entrada, definido como 2, correspondente aos dois nós de entrada (para as duas entradas da função XOR);
  • hidden_size: o tamanho da camada oculta, também definido como 2. Essa escolha é um tanto arbitrária, mas suficiente para aprender a função XOR;
  • output_size: o tamanho da camada de saída, definido como 1, correspondente ao único nó de saída (o resultado da operação XOR);
  • learning_rate: taxa de aprendizado para o algoritmo de otimização, controlando o quanto os pesos são ajustados durante o treinamento.

Pesos e Biases

  • W1 e b1: os pesos (W1) e biases (b1) para as conexões da camada de entrada para a camada oculta. W1 é uma variável do TensorFlow inicializada com valores aleatórios e tem formato (input_size, hidden_size), ou seja, (2, 2). b1 é uma variável do TensorFlow inicializada com zeros e tem formato (hidden_size), ou seja, (2);
  • W2 e b2: os pesos (W2) e biases (b2) para as conexões da camada oculta para a camada de saída. W2 é inicializado com valores aleatórios e tem formato (hidden_size, output_size), ou seja, (2, 1). b2 é inicializado com zeros e tem formato (output_size), ou seja, (1).

Função de Treinamento

  • train_step(): esta é a função principal de treinamento. Utiliza tf.GradientTape() para diferenciação automática. No passo direto, calcula as ativações da camada oculta (a1) e as previsões de saída (Y_pred). A perda é calculada como o Erro Quadrático Médio entre Y_pred e Y. A função então calcula os gradientes e atualiza os pesos e biases;
  • tf.sigmoid(): uma função de ativação sigmoide é utilizada, transformando a entrada em um valor entre 0 e 1. Isso é usado tanto para a camada oculta quanto para a camada de saída.

Loop de Treinamento

  • A rede é treinada por 2500 épocas. Em cada época, a função train_step() é chamada e os pesos são atualizados. A perda é impressa a cada 500 épocas para monitorar o progresso do treinamento.

Conclusão

Como a função XOR é uma tarefa relativamente simples, não é necessário utilizar técnicas avançadas como ajuste de hiperparâmetros, divisão de conjuntos de dados ou construção de pipelines de dados complexos neste estágio. Este exercício é apenas um passo em direção à construção de redes neurais mais sofisticadas para aplicações do mundo real.

Dominar esses conceitos básicos é fundamental antes de avançar para técnicas mais avançadas de construção de redes neurais nos próximos cursos, onde utilizaremos a biblioteca Keras e exploraremos métodos para aprimorar a qualidade do modelo com os recursos avançados do TensorFlow.

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt