/neurog_neural_network

Neural Network implementation

Primary LanguageGo

Este código é uma implementação em Go de uma rede neural simples com o propósito de classificar flores íris com base no conjunto de dados de flores íris. O código é dividido em várias partes, incluindo a definição da arquitetura da rede neural, a implementação do retropropagação (backpropagation) para treinamento e a criação de um método de feedforward para fazer previsões. Vamos analisar como este código funciona passo a passo:

Definindo Funções e Tipos Úteis:
    O código começa definindo tipos e funções personalizados que serão usados ao longo da implementação.
    O tipo neuralNet representa a rede neural, contendo sua configuração, pesos e viés (bias) para as camadas ocultas e de saída.
    O tipo neuralNetConfig define a arquitetura e os parâmetros de aprendizado da rede neural.
    A função newNetwork inicializa uma nova rede neural com a configuração fornecida.
    Também existem duas funções, sigmoid e sigmoidPrime, que definem a função de ativação sigmoid e sua derivada.

Implementando Retropropagação (Backpropagation) para Treinamento:
    O cerne desta implementação de rede neural é o método de retropropagação, que é usado para treinar a rede.
    O método train treina a rede neural recebendo matrizes de entrada x (recursos) e y (rótulos) e ajustando os pesos e os viés da rede.
    Começa por inicializar pesos e viés aleatórios para a rede.
    Em seguida, realiza o processo de avanço (feedforward) para calcular a saída da rede.
    A seguir, calcula o erro entre a saída prevista e os rótulos reais.
    Calcula os gradientes para os pesos e os viés usando a retropropagação e a derivada da função sigmoid.
    Finalmente, ajusta os pesos e os viés usando o método do gradiente estocástico descendente (SGD) por um número especificado de épocas.

Implementando Feed Forward (Avanço) para Previsão:
    Após o treinamento da rede neural, você pode usá-la para fazer previsões.
    O método predict recebe os dados de entrada x e retorna a saída prevista.
    Ele realiza um processo semelhante de avanço (feedforward) ao da fase de treinamento, usando os pesos e os viés treinados para calcular a saída.

Os Dados:
    O código também fornece informações sobre os dados usados para treinar e testar a rede neural. Os dados são baseados no conjunto de dados da íris, com algum pré-processamento para converter os rótulos de espécies em uma codificação one-hot.

Colocando Tudo Junto:
    Na função main, o código lê os dados de treinamento de um arquivo CSV e os prepara para o treinamento. Ele define a arquitetura da rede e os parâmetros de aprendizado.
    Em seguida, treina a rede neural chamando o método train com os recursos de entrada e os rótulos.

Teste e Cálculo da Precisão:
    Após o treinamento, o código analisa os dados de teste e usa o método predict para fazer previsões.
    Calcula a precisão do modelo comparando a classe prevista com a classe real e contando o número de previsões corretas.

Resultados:
    O código fornece a precisão da rede neural nos dados de teste, o que indica o quão bem a rede aprendeu a classificar flores íris.

Este código demonstra uma rede neural simples implementada do zero em Go com o objetivo de resolver um problema de classificação. Ele destaca os componentes essenciais de uma rede neural, incluindo avanço, retropropagação e previsão. A arquitetura específica e os parâmetros podem ser ajustados com base no problema em questão.