Percebeu alguma mudança? Veja o porquê.
Este é o Jornal do Jerimum, um blog mantido por Allan Garcia, sócio e administrador da ADG Soluções. Neste blog tratamos de assuntos relacionados com Tecnologia, Linux, Redes, Programação e outros.

Como implementar Redes Neurais usando Python – Parte 1 Allan Garcia 11 de outubro de 2007

Este artigo será dividido em várias partes, vou falar sobre as Redes Neurais propriamente ditas e como implementar alguns algorítmos usando Python, nesta primeira parte vamos ver o básico e a medida que os artigos forem sendo publicados ver coisas mais avançadas.

Perceba que o objetivo é demonstrar as implementações em Python e não ver teoria aprofundada de Redes Neurais, para isso recomendo o livro do Haykin.

Apresentando as Redes Neurais

O que são? – “São sistemas de processamento de sinais ou de informações, compostos por um grande número de processadores elementares chamados neurônios artificiais, operando de forma paralela e distribuída, de modo a resolver um determinado problema físico/computacional.”

Esquema! – (X1, X2, …, Xn) dot (W1, W2, …, Wn) — F(x) — Y

Isso significa que uma Rede Neural, de um neurônio apenas, é um combinador linear que passa por uma função de ativação e dá um resultado Y, o mais interessante é que podemos programá-la para que ela dê o resultado que você deseje! Com isso podemos fazer, dentre outras coisas, aproximadores de funções, associadores, classificação de padrões, predição futura, controle de sistemas, filtragem de sinais, compressão de dados, datamining, etc.

Redes Neurais podem ser de vários tipos, nesta parte básica vamos ver as mais simples, as Redes Neurais supervisionadas, que são treinadas (ou programadas) usando um conjunto de exemplos conhecidos, com atributos e respostas, e desta forma a Rede Neural “se acostuma” em dar os resultados desejados e passa a responder de acordo.

Programar uma Rede Neural é ajustar os valores do vetor W, de todos os neurônios, para que determinada entrada X, quando processada, resulte num valor Y desejado.

Um algoritmo simples

Este descreve apenas o funcionamento de um neurônio .

# -*- coding: utf8 -*- from numpy import array, sign class Neuron: def __init__(self, example, factor=0.1): self._bias = -1.0 self._factor = factor x, self._d = example self._x = array([self._bias]+x) self._w = array([0.0]*(len(self._x))) self._y = None self.train(example) def train(self, example): x, self._d = example self._x = array([self._bias]+x) self._y = self._sign(self._sum()) if self._y != self._d: self._adjust_w() def execute(self, x): self._x = array([self._bias]+x) self._y = self._sign(self._sum()) return self._y def _error(self): return self._d - self._y def _sum(self): return (self._x*self._w).sum() def _sign(self, v): if sign(v) < 0: y = 0 else: y = sign(v) return y def _adjust_w(self): self._w += self._factor * self._x * self._error()

E para executar o perceptron, que é o que irá apresentar os exemplos ao neurônio, temos:

# -*- coding: utf8 -*- from Neuron import Neuron from random import randint class Perceptron: def __init__(self, examples, max_epochs=100): self._examples = examples self._this_epoch_examples = list(self._examples) self._max_epochs = max_epochs self._epoch = 0 self._neuron = Neuron(self._rand_example()) self.train() def train(self): while self._epoch <= self._max_epochs: self._this_epoch_examples = list(self._examples) for i in range(len(self._this_epoch_examples)): self._neuron.train(self._rand_example()) print "Epoch: %d" % self._epoch self._epoch += 1 def execute(self, x): return self._neuron.execute(x) def _rand_example(self): lenght = len(self._this_epoch_examples) i = randint(0,lenght-1) return self._this_epoch_examples.pop(i)

Execute as classes acima usando

# -*- coding: utf8 -*- from Perceptron import Perceptron # AND examples_and = [ [[1,1],1], [[1,0],0], [[0,1],0], [[0,0],0] ] nn = Perceptron(examples_and) nn.execute([1,0])

Analise o objeto criado, seus métodos e pesos, verifique que com o método “execute” você poderá testar se as respostas estão sendo dadas corretamente.

Aguarde a parte 2 deste artigo para mais detalhes…

4 comentários para “Como implementar Redes Neurais usando Python – Parte 1”

  1. Rafael Augusto disse:

    E ai brother, td massa??
    POww, mto massa tua iniciativa, foi um dos primeiros artigos que mostra RNa na pratica!!
    Eu ainda nao sei nda, mas me interessei pelo assunto e comprei o livro do Simon Haykin, estou esperando chegar…Pensei em python pra implementar, ainda sou iniciante em programação mas tow me esforçando!
    Vlw msm e se puder posta mais alguma coisa, se puder me mandar alguma dica de por onde começar ia ser massa, meu email é rafaelkiedis@gmail.com, vlw!

  2. Allan Garcia disse:

    O livro do Haykin é um ótimo começo, realmente estou devendo as próximas partes dos artigos sobre redes neurais, mas agora vendo que alguém está se interessando por isso vou me motivar para escrever a parte 2. Atualmente estou escrevendo um framework completo para redes neurais, a ideia é substituir o toolbox “NN” do Matlab (quanta presunção) mas é isso aí… em breve teremos mais de RN por aqui.

  3. Rafael Augusto disse:

    Legal achar alguem q entenda do assunto, pois eu moro no interior de PE e a faculdade onde estudo é nova. Eu sou iniciante em Programação, sei apenas o básico de Java e de C, mas sempre tive interesse por Python e fiquei mais interessado qdo fui para um encontro de software livre em Natal a pouco tempo, À propósito vc é de Natal, não é? Seria massa um framework brazuca, espero que consiga!
    O que vc me indicaria como estudo de RNA, alem do livro do Haykin? Dizem que calculo é importante..e programação, pesa mto? Seus algoritmos pareceram bem simples.
    Até mais, Abraços!

  4. Allan Garcia disse:

    Esse algoritmo é simples porque é bem principiante mesmo, é importante conhecimento de cálculo diferencial e integral, alguma coisa de estatística básica e MUITO de álgebra linear, sem isso você não irá entender muita coisa do livro do Haykin (que não tem nada disso explicadinho), praticamente todo algoritmo de redes neurais se baseiam em matrizes, conhecer a geometria* dos números é interessante!

    * eu falo geometria porque geralmente algebra é ligada a isso erroneamente, quando falamos de matrizes 5º dimencionais não dá para imaginar, a não ser usando conceitos de grafos.

    Boa sorte nos estudos! Qualquer coisa se quiser trocar uma ideia estou por aqui.

Deixe um comentário