Rede neural para reconhecimento de numeros

Olá,

estou precisando desenvolver uma rede neural para reconhcimento de numeros de 0 a 9.
será que alguém pode me ajudar?

[quote=PBOSCO]estou precisando desenvolver uma rede neural para reconhcimento de numeros de 0 a 9.
será que alguém pode me ajudar?[/quote]

E qual é a dúvida?

Man,
sou novo nessa área de Redes neurais. Meu professor passou um trabalho para criarmos uma rede neural que reconheca números de 0 a 9. Tive a idéia de usar matrizes representando os números como entrada para a rede. mas estou meio perdido em como começar. Se puder me dar algumas dicas agradeço.

Já procurou artigos científicos à respeito?
http://www.cin.ufpe.br/~tg/2008-2/rmoc.doc

Você pode gerar o histograma horizontal e o vertical, e usar isso como entrada da sua rede neural.
É uma técnica bem comum. O artigo acima a descreve em detalhes.

ok,

o meu problema é que tenho que entrar com uma matriz 8X6 numa rede neural com 2 camadas, representando um número e a rede tem que me dizer no final que número é esse. sei que no final eu terei 4 neuronios representando binariamente esse número(saída).
tem alguns pontos que estou em dúvida:

com essa matriz 8X6 eu terei 48 entradas correto?
quntos neurônios eu teria que ter na primeira camada após a entrada, e quantos na segunda?
qual critério utilizo para estabelecer quantos neurônios eu terei em cada camada?

Certo.

[quote]quntos neurônios eu teria que ter na primeira camada após a entrada, e quantos na segunda?
qual critério utilizo para estabelecer quantos neurônios eu terei em cada camada?
[/quote]

Esse documento pode te ajudar com várias dessas perguntas:
http://www.faqs.org/faqs/ai-faq/neural-nets/part1/preamble.html
O fato é que determinar o critério perfeito para o número de neurônios na camada escondida é uma informação tão valiosa, que tem até prêmio para encontra-la.

A camada de saída geralmente terá uma saída para cada valor do conjunto de resposta. Se você está identificando dígitos numéricos, 10.

No caso da entrada, vc poderia usar o método de histogramas que sugeri escolhendo 24 linhas na horizontal e 24 na vertical. E torcer para isso ter precisão suficiente.
O importante é que você leia o artigo e entenda o conceito.

Casualmente, esse exemplo “8 x 6” que você passou parece com aquele existente no livro de Russel e Norvig:

http://afiliados.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&CatId=11827&ProdId=223050&ST=BV11827

Pode ser que o que o professor quer tenha sido tirado desse livro.

RNA é bem tenso… matematica lazarenta de foda

Não é tenso, mas esse modelo de perceptron com duas camadas não é a melhor solução pra isso. A melhor solução é usar a SOM para problemas de reconhecimento.
Participei de uma iniciação científica onde o projeto era justamente um ocr para reconhecer placas de carros. Usamos um modelo perceptron multicamadas.

A entrada da rede é o número de pixels da imagem. A idéia é usar o input como um sensor ótico, ou mesmo a íris de um olho. A saída são 36 axônios, onde o excitado diz qual é a letra reconhecida(uma do alfabeto todo ou número).

As imagens são segmentadas usando o histograma para saber o local exato da separação dos caracteres(onde for vale não existe letra). Essas amostras precisam ser normalizadas para um valor pequeno como 8x6 citados. O backpropagation não consegue convergir valores grandes passados para treino.

http://www.lncc.br/~labinfo/tutorialRN/frm4_perceptronMultiCamadas.htm

Será que o problema não era a entrada ser muito complexa?

Será que o problema não era a entrada ser muito complexa?[/quote]

O problema que eu vi aí é o modelo da rede perceptron com duas camadas. Esse modelo não consegue resolver problemas não linearmente separáveis(não consegue resolver um xor)Pode ser que o backpropagation não consiga convergir o treino se este cair nessa situação. Então o modelo multicamadas(com uma intermediária) é mais recomendado.

http://www.lncc.br/~labinfo/tutorialRN/frm3_operacaoBooleana.htm

O fato de existir entradas e valores que não sejam normalizados influencia completamente no resultado do treino. Esses valores precisam estar de cordo com o modelo do problema.
Por exemplo, para esse reconhecimento de caracteres a imagem tem que estar binarizada. O perceptron só vai ler 0 ou 1 nos dendritos(que serão os pixels da imagem binarizada)

Tem uns artigos interesantes no que diz respeito aos algoritmos corretos para cada tipo de problema. Dessa maneira aliviando a dor de cabeça que é treinar uma rede da maneira correta.

www.web-us.com/brain/neur_train.html

Ah, tem razão. Estou tão acostumado a já pensar em redes com uma camada escondida, que nem me liguei.

Realmente, com duas camadas, só com problemas linearmente separáveis.

Ou seja, algumas funções matemáticas, mas quase nada do mundo real.

[quote=ViniGodoy]Ah, tem razão. Estou tão acostumado a já pensar em redes com uma camada escondida, que nem me liguei.

Realmente, com duas camadas, só com problemas linearmente separáveis.

Ou seja, algumas funções matemáticas, mas quase nada do mundo real.[/quote]

Com algumas horas dá pra escrever uma multicamadas do zero em qualquer linguagem.
Fazer o treino convergir é outra história. Dá para perder algumas semanas até descobrir o algoritmo certo pra treinar o determinado problema.
Mas para ocr o backpropagation é uma boa opção.

[quote=juliocbq]Com algumas horas dá pra escrever uma multicamadas do zero em qualquer linguagem.
Fazer o treino convergir é outra história. Dá para perder algumas semanas até descobrir o algoritmo certo pra treinar o determinado problema.
Mas para ocr o backpropagation é uma boa opção.[/quote]

Eu fiz um teste com uma rede FAN (Fuzzy) com BackPropagation. Funcionou até legal.
Mas não tinha uma base suficientemente grande para chegar num algorítmo mais genérico.

Fazer OCR para um tipo de fonte só qualquer um faz. :slight_smile:

olá amigos,
em primeiro lugar gostaria de me desculpar por não ter respondido os posts de vcs. é que fiquei sem net esses dias e não pude responder.
em segundo lugar gostaria de agredecer a ajuda de todos.
vou dar uma olhada nos links que vcs me sugeriram.

obrigado!!!