Eu implementei(tentei) essa Rede Neural(MLP) para resolver o XOR, utilizando
backpropagation... usei a biblioteca numpy.
Mas não importa o quanto eu tente, a rede não dá a resposta certa =p
Alguem pode me ajudar?
--
----------+----------+----------
Cairo Rocha
Bacharelando em Ciências da Computação
Universidade Federal do Piauí
----------+----------+----------
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html
2009/11/19 Cairo Rocha <cairoa...@gmail.com>
>
> Eu implementei(tentei) essa Rede Neural(MLP) para resolver o XOR, utilizando
> backpropagation... usei a biblioteca numpy.
>
> http://pastebin.com/f4359ac7b
>
> Mas não importa o quanto eu tente, a rede não dá a resposta certa =p
>
> Alguem pode me ajudar?
>
Não tive tempo de olhar o código, mas uma vez eu fiz um trabalho de IA na facu
e acabei me baseando no peach[1].
Dê uma olhada lá, o código é bem claro. Foi bom para tirar dúvidas.
[]'s
George
[1] http://code.google.com/p/peach/
André Luis, A rede neural que tem de ser usada é a Perceptron de multiplas camadas(MLP) usando backpropagation e uma função de ativação sigmoide.
Tenho que criar uma rede generica pra resolver dois problemas, o XOR é só um teste pra ver se a rede está funcionando.
De qualquer forma, a rede começou a dar uns resultados, só estou com dificuldades agora para encontrar a arquitetura para meus problemas, alguém pode me passar alguma dica para criar uma rede que identifique vogais(representadas como arrays 5x5) ?
Código 'funcionando' : http://pastebin.com/f5b5c5a2
--- Em python...@yahoogrupos.com.br, Andre Luiz <superoxido@...> escreveu
>
> Cairo, bom dia.
>
> Também não olhei o código, confesso. Entretanto, pela própria
> constituição de uma rede neural, acredito que uma metodologia específica
> (Como o Teorema de Morgan, por exemplo (bastante usado para XOR)), não
> costuma ser muito eficiente; exceto você tenha diversas regras
> estabelecidas e condicionais onde você pode assegurar que serão sempre
> boleanas.
> Com a minha expêriencia em segurança da informação e em redes neurais,
> meu conselho é analisar, tabular os dados e criar uma metodologia para o
> seu problema.
> Se quiser discutir melhor o assunto, pode me contactar pelo e-mail:
> altadeu@...
>
> Forte abraço,
>
> Andre Luiz
>
> Cairo Rocha escreveu:
> >
> > Galera,
> >
> > Eu implementei(tentei) essa Rede Neural(MLP) para resolver o XOR,
> > utilizando
> > backpropagation... usei a biblioteca numpy.
> >
> > http://pastebin.com/f4359ac7b <http://pastebin.com/f4359ac7b>
> >
> > Mas não importa o quanto eu tente, a rede não dá a resposta certa =p
> >
> > Alguem pode me ajudar?
> >
> > --
> > ----------+----------+----------
> >
> > Cairo Rocha
> > Bacharelando em Ciências da Computação
> > Universidade Federal do Piauí
> >
> > ----------+----------+----------
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> >
> > __________ Information from ESET Smart Security, version of virus
> > signature database 4600 (20091112) __________
> >
> > The message was checked by ESET Smart Security.
> >
> > http://www.eset.com
>
>
>
> __________ Information from ESET Smart Security, version of virus signature database 4600 (20091112) __________
>
> The message was checked by ESET Smart Security.
>
> http://www.eset.com
A arquitetura mais óbvia a se testar é 25 neurônios na entrada (uma
para cada índice do array), 5 na camada de saída (cada neurônio
representando uma vogal, tendo sua saída treinada para 0 quando a
resposta não for a vogal representada pelo neurônio, e 1 quando o
contrário).
Para a camada escondida, algo por volta de (entradas / 2), ou seja,
testar algo entorno de 12 neurônios na camada escondida, ou menos,
dependendo da linearidade do mapeamento entrada->saída.
Obviamente, seria interessante você fazer outros testes, como, por
exemplo, apenas 3 neurônios na camada de saída, codificando em
binários os números de 0 a 8 (e utilizando só de 0 a 4, para A = 0, E
= 1, I = 2, O = 3 e U = 4).
O número de entradas também parece ser exageradamente grande, e algum
jeito de "resumir" as entradas também seria bem-vindo (procure
algoritmos como o PCA [1], por exemplo).
Como você pode ver, você tem muito o que testar, mesmo para resolver
um problema aparentemente simples. ;)
Por que você não se cadastra na lista da pyscience-brasil [2]? Lá você
pode encontrar ajuda mais direcionada a este tipo de assunto. :)
[1] http://en.wikipedia.org/wiki/Principal_component_analysis
[2] http://pyscience-brasil.wikidot.com/lista-de-discussao
[]'s,
Thiago F. Pappacena
Good things come for those who wait...
... and for the efficient people who doesn't wait too, but faster:
Open source, XP, OO, Python, VIM, Bash and Gentoo.
Também não olhei o código, confesso. Entretanto, pela própria
constituição de uma rede neural, acredito que uma metodologia especÃfica
(Como o Teorema de Morgan, por exemplo (bastante usado para XOR)), não
costuma ser muito eficiente; exceto você tenha diversas regras
estabelecidas e condicionais onde você pode assegurar que serão sempre
boleanas.
Com a minha expêriencia em segurança da informação e em redes neurais,
meu conselho é analisar, tabular os dados e criar uma metodologia para o
seu problema.
Se quiser discutir melhor o assunto, pode me contactar pelo e-mail:
Forte abraço,
Andre Luiz
Cairo Rocha escreveu:
>
> Galera,
>
> Eu implementei(tentei) essa Rede Neural(MLP) para resolver o XOR,
> utilizando
> backpropagation... usei a biblioteca numpy.
>
> http://pastebin.com/f4359ac7b <http://pastebin.com/f4359ac7b>
>
> Mas não importa o quanto eu tente, a rede não dá a resposta certa =p
>
> Alguem pode me ajudar?
>
> --
> ----------+----------+----------
>
> Cairo Rocha
> Bacharelando em Ciências da Computação
> Universidade Federal do PiauÃ
>
> ----------+----------+----------
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
>
> __________ Information from ESET Smart Security, version of virus
> signature database 4600 (20091112) __________
>
> The message was checked by ESET Smart Security.
>
> http://www.eset.com
__________ Information from ESET Smart Security, version of virus signature database 4600 (20091112) __________
The message was checked by ESET Smart Security.
------------------------------------
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html
> Eu implementei(tentei) essa Rede Neural(MLP) para resolver o XOR,
> utilizando backpropagation... usei a biblioteca numpy.
O ideal, ao se usar o numpy, é tentar se aproveitar ao máximo das
funcionalidades já implementadas lá. Há formulações do feedforward
e do backpropagation em termos matriciais, e aí nesse caso, o me-
lhor a fazer é dimensionar cada camada como uma matriz e usar as
operações da melhor maneira possível.
Assim, o feed de uma camada da rede neural pode ser feita com uma
linha apenas:
y = f(sum(w*x))
em que w é o vetor de pesos sinápticos, x é o vetor de estímulos,
e f() é a função de ativação (em geral sigmoidal).
No peach está implementado assim. Vou reconhecer que o grave pro-
blema dele é a documentação. Estou cuidando disso conforme posso,
e pra falar a verdade, ela está na prática pronta (usando o epydoc),
mas ainda estou fazendo revisões e queria deixar os exemplos redon-
dos antes de publicar. Mas já estou em dívida com várias pessoas. :P
Em todo caso, as recomendações do Thiago para o seu problema espe-
cífico são excelentes. Se precisar de orientação em como usar o
peach, é só mandar um email. :)
--
José Alexandre Nalon
na...@terra.com.br