Redes neurais em java?

Para quem segue mestrado, ou até mesmo graduação nas áreas de matemática, engenharia e ciencia da computação. Gostaria de saber se vocês já trabalharam com redes neurais em java, isto é, desenvolveram códigos em java relativos a redes neurais. Se sim, contem suas experiencias, o que vocês acharam, se foi fácil programar, se tem material de suporte…

Falou???
Sim cv, eu conheço o google, mas quero experiencias e não códigos prontos… hehehehehehe :lol: :lol: :lol: :lol: :lol:

[size=7]Agora só falta ele colocar uma busca no google escrito: experience in neural net in java[/size] :lol: :lol: :lol:

Um amigo meu fez uma RNA com Java. Mandou o código para mim, olhei e achei bonitinho. Não, não adianta pedir o fonte para mim. Peçam para ele.

<edit>

Ele postou o código neste tópico. É só baixar.

</edit>

Eu estou desenvolvendo uma RNA em java para uma monografia da faculdade. Para implementar a RNA existem diversas maneira, como eu estava a fim de criar um framework para poder reutilizar a RNA eu usei como referencia 2 frameworks(ANNeF e JONNES). Você pode verificar esses frameworks ou vc pode ir no google que vc vai achar varias referencia de implementação.

“Seus probremas acabaram-se!”

http://www.jeffheaton.com/ai/

Blz Daniel… vou pedir o fonte para ele e falar que você disse que ele fez e mandou pedir diretamente a ele blz?

Valeu RodrigoSol, muito bom o site…

Eu sou o tal amigo. Taí o código (não tá tão bonitinho assim, mas taí :slight_smile: )

Jau, peguei te exemplo e foi otimo p compreender , entretanto quando tentei fazer algumas modificações obtive um erro. Tentei cosntruir uma rede com 3 camadas e : 19 neuronios na primeira, 380 na segunda e 179 na ultima. No treinamento obtive erro.

usei como entrada o seguinte:
final double[][]input = { { 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1} };

e saida
final double[][] desiredOutput = { {0.9346,0.9346,0.9346,0.9346,
0.9346,0.9502,0.9626,0.9732,0.9821,0.9891,
0.9945,0.9980,0.9998,0.9998,0.9980,0.9945,
0.9892,0.9822,0.9733,0.9628,0.9503,0.9502,
0.9626,0.9732,0.9821,0.9891,0.9945,0.9980,
0.9998,0.9998,0.9980,0.9945,0.9892,0.9822,
0.9733,0.9628,0.9503,0.9346,0.9567,0.9566,
0.9991,0.9858,0.9683,0.9780,0.9991,0.9920,
0.9859,0.9921,0.9965,0.9779,0.9682,1.0000,
0.9964,0.9468,0.9467,0.9346,0.9346,0.9426,
0.9566,0.9682,0.9779,0.9858,0.9920,0.9964,
0.9991,1.0000,0.9991,0.9965,0.9921,0.9859,
0.9780,0.9683,0.9567,0.9427,0.9426,0.9566
.9682,0.9779,0.9858,0.9920,0.9964,0.9991,
1.0000,0.9991,0.9965,0.9921,0.9859,0.9780,
0.9683,0.9567,0.9427,0.9346,0.9346,0.9408,
0.9484,0.9486,0.9408,0.9708,0.9800,0.9875,
0.9933,0.9973,0.9995,0.9999,0.9955,0.9907,
0.9841,0.9757,0.9656,0.9536,0.9986,0.9597,
0.9408,0.9626,0.9732,0.9821,0.9891,0.9945
.9980,0.9998,0.9998,0.9980,0.9945,0.9892,0
.9822,0.9733,0.9627,0.9409,0.9409,0.9409,
0.9598,0.9655,0.9535,0.9999,0.9986,0.9906,
0.9840,0.9656,0.9709,0.9757,0.9801,0.9973,
0.9995,0.9955,0.9906,0.9841,0.9876,0.9907,
0.9933,0.9955,0.9973,0.9800,0.9756,0.9708,
0.9655,0.9999,0.9999,0.9973,0.9955,0.9519,
.9486,0.9518,0.9484,0.9756,0.9840,0.9986,
0.9933,0.9876,0.9801,0.9709,0.9598,0.9995,
0.9535,0.9536,0.9597,0.9995,0.9875,0.9986,0.9933} };

voce pode me ajudar?

Beleza Luís?!

Essa implementação da MLP aí não tá lá aquelas coisas viu. Eu descobri que ela tem uns pau, mas até hoje não deu tempo de corrigir. :-(

Mas diz aí, qual foi o erro?

Bem,

Eu já usei RNA nas nunca de forma acadêmica.
Usei num projeto real, para resolver um problema real.

A solução escolhida eh o Joone. Ainda está em fase experimental dentro do cliente, mas os resultados são animadores.

Joone: http://www.jooneworld.com/

VELO

O erro é de estouro de array no método computDeltas. Se você quiser lhe passo as classes q cosntruir baseadas em seus exemplos. Na verdade apenas renomeei os metodos e nomes das classes para poder ensinar as pessoas que compoe meu grupo de pesquisa.

A RNA que preciso deverá receber umas condições de contorno eletricas aplicadas a um capacitor e representar na saida a variação de temperatura do mesmo.
Nunca havia implementado uma RNA em Java, apenas em MATLAB e RNAs mais simples, só que agora preciso construir em Java um software monitor que demonstre online o comportamento do capacitor e a ideia seria cosntruir uma RNA que a cada 10 minutos receba novos dados de entrada e forneça a saida para que eu represente em meu monitor o comportamento.

Obrigado pela atenção.

Jau o q seriam o “eta” e “alpha” no seu exemplo? Um deles é a taxa de aprendizagem? qual?
Estou pensando em implementar um backpropagation meu e verificar se funciona já que com o q peguei não consigo simular para redes com mais de 1 neuronio na camada de saida.

Quando eu implementei isso eu era mais ogro do que sou hoje, dava uns nomes muito toscos para meus métodos.

A taxa de aprendizagem é o que está com valor menor no programa de testes (0.005, eu acho) e o outro é o momento, aquele embalo que se dá para a rede não “ir mudando de opnião” já de cara.

[quote=jau]
Quando eu implementei isso eu era mais ogro do que sou hoje, dava uns nomes muito toscos para meus métodos.

A taxa de aprendizagem é o que está com valor menor no programa de testes (0.005, eu acho) e o outro é o momento, aquele embalo que se dá para a rede não “ir mudando de opnião” já de cara.[/quote]

Ou seja, Jau, tá na hora de você colocar em prática tudo aquilo que você leu no livrinho do tio Fowler.

Jau, seguinte, fiz uma rede simples de 2 neuronios na primeira camada , 4 na segunda e 2 na de saida, e foi ai q detectei a falha no metodo computeDeltas, ele parece estourar um array com o indice K. Ja tentei de inumeras maneiras corrigir o problema, mas não consegui.
Segue o metodo e se vc puder me da uma ajuda nesse tb. Obrigado.

private void computeDeltas(double[] input) {
	int i, j, k;

	for (i=0; i < layers.length ; i++) // Layer by Layer
		for (j=0; j < layers[i].getSize(); j++) { // Neuron by Neuron
			for (k=0; k < layers[i].getBackNeuron(j).getSize(); k++) { // Weight by Weight
				layers[i].getBackNeuron(j).setDeltaw(k,
					eta * input[k] * layers[i].getError(j) +
					alpha * layers[i].getBackNeuron(j).getDeltaw(k)
				);
			}

			layers[i].getBackNeuron(j).setDeltaBias(
				eta * (-1) * layers[i].getError(j) +
				alpha * layers[i].getBackNeuron(j).getDeltaBias()
			);
			input = m.getLayer(i).getOutput();
		}
}

[color=orange]Alguns frameworks tornam certas coisas mais faceis, assim como ja possuem testes e versões estaveis, alem de um tempo de desenvolvimento maior!

Frameworks:

JOONES http://www.jooneworld.com
ANNEF http://www.inf.unisinos.br/~jrbitt/annef/
ENCOG http://www.heatonresearch.com/encog
NEUROPH http://neuroph.sourceforge.net/

Um otimo site seria o do Jeff Heaton, um grande pesquisador nesta area, onde existem artigos, exemplos e otimos livres de sua autoria disponiveis online:
http://www.jeffheaton.com/ai/[/color]
Em meu blog falo sobe computação distribuida, inteligencia artificial e java…visitem:
http://www.amsterdaintelligence.blogspot.com

[quote=amsterdatech]B[color=orange]Alguns frameworks tornam certas coisas mais faceis, assim como ja possuem testes e versões estaveis, alem de um tempo de desenvolvimento maior!

Frameworks:

JOONES http://www.jooneworld.com
ANNEF http://www.inf.unisinos.br/~jrbitt/annef/
ENCOG http://www.heatonresearch.com/encog

Um otimo site seria o do Jeff Heaton, um grande pesquisador nesta area, onde existem artigos, exemplos e otimos livres de sua autoria disponiveis online:
http://www.jeffheaton.com/ai/[/color]
Em meu blog falo sobe computação distribuida, inteligencia artificial e java…visitem:
http://www.amsterdaintelligence.blogspot.com[/quote]

Sim, mas codificando você fica por dentro de tudo que acontece no software, sem contar o conhecimento mque se ganha.

[quote=juliocbq][quote=amsterdatech]B[color=orange]Alguns frameworks tornam certas coisas mais faceis, assim como ja possuem testes e versões estaveis, alem de um tempo de desenvolvimento maior!

Frameworks:

JOONES http://www.jooneworld.com
ANNEF http://www.inf.unisinos.br/~jrbitt/annef/
ENCOG http://www.heatonresearch.com/encog

Um otimo site seria o do Jeff Heaton, um grande pesquisador nesta area, onde existem artigos, exemplos e otimos livres de sua autoria disponiveis online:
http://www.jeffheaton.com/ai/[/color]
Em meu blog falo sobe computação distribuida, inteligencia artificial e java…visitem:
http://www.amsterdaintelligence.blogspot.com[/quote]

Sim, mas codificando você fica por dentro de tudo que acontece no software, sem contar o conhecimento mque se ganha.[/quote]

Além disto, os melhores algoritmos de aprendizado não estão inclusos nestes frameworks, desta forma, eles podem facilitar sim, mas para o aprendizado e na utilização de problemas simples.

[color=orange][size=18]Concordo…certos frameworks podem ser intrusivos em seu codigo…alem de possuirem soluções “duras” para problemas…porem vc pode geralmente utilizar as classes do motor de redes neurais e/ou extende-las para sua necessidade![/size][/color]

O professor Roberto Tadeu Raittz, aqui do Paraná, desenvolveu uma técnica em redes neurais usando lógica fuzzy realmente impressionante:
http://www.eps.ufsc.br/disserta98/raittz/index.htm

E, para comprova-la, desenvolveu as redes FAN em Java. Você pode tentar entrar em contato com ele.

PS: Só agora que vi que o tópico foi ressuscitado pelo amsterdatech. Talvez agora seja tarde demais.

[quote=ViniGodoy]O professor Roberto Tadeu Raittz, aqui do Paraná, desenvolveu uma técnica em redes neurais usando lógica fuzzy realmente impressionante:
http://www.eps.ufsc.br/disserta98/raittz/index.htm

E, para comprova-la, desenvolveu as redes FAN em Java. Você pode tentar entrar em contato com ele.

PS: Só agora que vi que o tópico foi ressuscitado pelo amsterdatech. Talvez agora seja tarde demais.[/quote]

Ele portou a FANN pra java?

Mas digo, reescreveu tudo em java, ou usou um jni nas libs?