Redes neurais em java?

53 respostas
I

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:

53 Respostas

D

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>

W

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.

R

“Seus probremas acabaram-se!”

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

I

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…

J

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

F

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?

J

Beleza Luís?!

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

Mas diz , qual foi o erro?
V

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

F

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.

F

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.

J

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.

D

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.

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

F

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();
		}
}
A

[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

J

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

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

M

juliocbq:
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

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

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.

A

[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]

V

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.

J

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.

Ele portou a FANN pra java?

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

V

Que eu saiba uma equipe de alunos dele portou a fan.

J

Eu olhei o link que postou. É FAN(Free Associative Neurons), e não a FANN(Fast Artificial Neural Network), que eu estava pensando.

http://leenissen.dk/fann/

Esta essa rede é de alta performance.Foi contruída para responder rapidamente, e é opensource.

V

Sim, eu sempre escrevi com uma letra só. eheheheheh
A FAN é outra rede, baseada em fuzzy.

J

ViniGodoy:
Sim, eu sempre escrevi com uma letra só. eheheheheh
A FAN é outra rede, baseada em fuzzy.

Eu li o artigo que postou. Material legal. Deveria existir uma área dessa, aqui no guj.

Tem um livro muito bom

Comprei ele há uns 4 anos. Sempre está atual. Esse tipo de coisa nunca fica desatualizada.

M
import java.io.*;

public class TestPercpetron {
	
	int matriz [] = {1, 0, 0, 1};
	int matriz2 [] = {0, 0, 1, 1};
	int pesos [] = {2,3};
	int count = 0;
	int dif;

	public TestPerceptron() {
		
		
			
			int k = 0,l = 1, count = 0;

//Faz a soma ponderada dos pesos
			
			for (int i=0; i<2; i++){
				
				int result = matriz[k]*pesos[0]+matriz[l]*pesos[1];
				
				System.out.println("Resultado de "+k+ " por " +0+ " e de " 
						+ l + " por " + 1 + " = " + result);
				
				
				
	//testa se o resultado da soma ponderada é igual ao resultado esperado
		
				if(result<1){
					
					
					
					dif =result - 1;
					pesos[0] = pesos[0]+(dif);
					pesos[1] = pesos[1]+(dif);
					  
				
				}
				else{
					System.out.println("\n");
					
					System.out.println("Resultado de "+k+ " por " +0+ " e de " 
							+ l + " por " + 1 + " está classificado corretamente!");
					
					System.out.println("\n");
					
				}
				
				/*/////////////////////////////////////////////////////////////////////////////   */
				
			//como não descobri um meio melhor, separei as entradas em duas matrizes diferentes para comparar as saídas 
	
				int result2 = matriz2[k]*pesos[0]+matriz[l]*pesos[1];
				
				if(result2>0){
				
					dif =result - 1;
					pesos[0] = pesos[0]-(dif);
					pesos[1] = pesos[1]-(dif);
					
				
				}else{
					
                    System.out.println("\n");
					
					System.out.println("Resultado de "+k+ " por " +0+ " e de " 
							+ l + " por " + 1 + " está classificado corretamente!");
					
					System.out.println("\n");
					
				}
				
				
				
				k = k+2;
				l = l+2;
				count = count+1;
				
			
			
			
		}	
	}

Pessoal, eu sou um iniciante na implementação de perceptrons. Esse é o meu primeiro e tentei implementar da melhor e mais simples forma possível. Queria ajuda para fazê-lo realmente funcionar, e saber se eu estou no caminho certo. O Perceptron precisa ser feito para as funções lógicas, OR, AND e XOR.

J

Mota, o perceptron sem a função de aprendizado não é nada. Precisa implementar um algoritmo como o backpropagation para ativa-lo.

http://www.lncc.br/~labinfo/tutorialRN/frm3_modeloPerceptron.htm
http://www.bicodocorvo.com.br/tecnologia/inteligencia-artificial/perceptron-multicamadas

Backpropagation

Aqui um exemplo em java. No link acima há vários exemplos em outras linguagens.

Existem n funções de aprendizado, e o backpropagation é a mais comum.

M

Kra, vlw pela dica.
Quer dizer que o que eu fiz não serve de nada?

J

mota:
Kra, vlw pela dica.
Quer dizer que o que eu fiz não serve de nada?

Você vai precisar dessa função de aproximação para que o perceptron entenda o que pode ser uma possível resposta. E idéia é que ele se excite e passa a informação para o próximo neurônio.

Livros indicados

O livro de implementações com java não é muito bom, e só deve ser levado em conta como modelo de implementação. O ideal para se entender redes neurais é abordar a teoria(segundo link) e implementá-la no mathlab.

G

Pessoal,

Esse site do Jeff, ele tem códigos? Tipo… Tem alguns frameworks abertos em que a gente pode setar as camadas, quantidades de neurônios, etc…

Funções para que o MLP possa usar quando for generalizar (o que é muito importante)… Eu vi que tem muitas coisas (teóricas) sobre os tópicos de redes neurais, mostrando o que é e tal…

Mas como programar em java no site do Jeff, tem?

J

gpmdf2:
Pessoal,

Esse site do Jeff, ele tem códigos? Tipo… Tem alguns frameworks abertos em que a gente pode setar as camadas, quantidades de neurônios, etc…

Funções para que o MLP possa usar quando for generalizar (o que é muito importante)… Eu vi que tem muitas coisas (teóricas) sobre os tópicos de redes neurais, mostrando o que é e tal…

Mas como programar em java no site do Jeff, tem?

A idéia é que você aprenda a teoria e possa por em prática em qualquer linguagem.

G

Ah, ta…

Eu to estudando redes neurais e tb to pesquisando alguns pontos sobre programação. Alguns pacotes disponibilizam o ambiente pra rodas redes neurais, usando camadas, nós, etc, etc… O problema que tô tendo é que eu não quero os modelos de aprendizagem mais comuns, como o backpropagation.

Entao to indo atras de algoritmos melhores… mas e bem interessante esse site, ele aborda varios temas da teoria…

J

gpmdf2:
Ah, ta…

Eu to estudando redes neurais e tb to pesquisando alguns pontos sobre programação. Alguns pacotes disponibilizam o ambiente pra rodas redes neurais, usando camadas, nós, etc, etc… O problema que tô tendo é que eu não quero os modelos de aprendizagem mais comuns, como o backpropagation.

Entao to indo atras de algoritmos melhores… mas e bem interessante esse site, ele aborda varios temas da teoria…


existem n algoritmos, mas cada um serve para uma determinada coisa.

G

claro.

o que eu quis dizer é que há alguns algoritmos (por exemplo, pra aprendizado) que são clássicos. Alguns mais novos visam o aprendizado de forma mais rápida (por exemplo).

É isso que tô procurando.

J

gpmdf2:
claro.

o que eu quis dizer é que há alguns algoritmos (por exemplo, pra aprendizado) que são clássicos. Alguns mais novos visam o aprendizado de forma mais rápida (por exemplo).

É isso que tô procurando.

esse livro que está na minha mão na foto é esse aqui:

Ele aborda muito bem esses algoritmos e tem exemplos de matlab. Integra fuzzy, gas e redes neurais para criação de sistemas híbridos.

M

gpmdf2:
claro.

o que eu quis dizer é que há alguns algoritmos (por exemplo, pra aprendizado) que são clássicos. Alguns mais novos visam o aprendizado de forma mais rápida (por exemplo).

É isso que tô procurando.

Veja a tese de Mestrado do Leandro Nunes em http://www.dca.fee.unicamp.br/~vonzuben/research/lnunes_mest.html

G

Cara, dei uma olhada bem, mas beeem por cima até agora.

Esse trabalho parece ser um tipo de “survey”, não é (lembrando que dei uma olhada bem superficial)? O que eu estou procurando é fazer algo novo, mesmo.

Até onde eu li, o trabalho que você indicou está muito bom mesmo! Vai me ajudar um bocado! Muito obrigado mesmo, amigo!

Você também trabalha com Redes neurais? estou usando para combater ataques a redes de computadores. Qual é seu trabalho na área? Se quiser conversar um pouco sobre o tema, meu e-mail é o [email removido]

Mais uma vez, obrigado pela dica! Vai ajudar bastante!

G

Pessoal,

to montando uma rede neural e até agora o framework que eu escolhi pra usar foi o joone.

eu montei uma rede, consigo salvar, carregar, treinar e colocar pra funcionar (posso, por exemplo, depois de treinar, criar um array com varias entradas, usar um FOR para mostrar cada uma dessas entrada pra rede e assim ela me responder com a classificação).

eu usei a base de dados XOR (“ou” exclusivo) e o que a rede me retorna pra cada entrada é um numero. alguem ja usou o joone com esse exemplo? existerm alguns tutoriais que usam essa base, justamente para a pessoa aprender a usar o framwork. O que significam esses numeros? Como interpretar?? um exemplo da saida : 0.0468468468464645…

é sempre um numero fracionario com a parte fracionaria beeem grande… eu preciso fazer um threshold pra isso?
base de dados:
0; 0; 0
0; 1; 1
1; 0; 1
1; 1; 1

a saida da rede deveria ser essa mesmo ou deveria ter zeros e uns? (pois nessa arquivo, as duas primeiras colunas sao para treinamento, isto é, a base de verdade e a ultima coluna é para prendizado, funciona para aprendizado supervisionado).

M

Olá gpmdf2

Lembrando que RNA do tipo MLP não são lineares (ao menos que você coloque uma função degrau na saída) e resultados como este é “bem” normal de acontecer. Neste caso, deve-se aplicar um arredondamento do valor da saída, para obter os valores 0 ou 1, conforme as entradas do XOR.

Em relação ao valor 0.0468468468464645… obtido com o JOONE, demonstra que o algoritmo de treinamento adotado por ele não é dos melhores, codifique você mesmo métodos de segunda ordem (newton) adaptado. Para você ter uma ideia, com o algoritmo de LM, meu treinamento do XOR se obtem valores muito próximo de zero (0,[telefone removido]…)

G

Legal, Mauro

Tô começando a escrever minha rede agora e o resultado que apresentei na verdade foi só um teste, algo bem básico mesmo.

Aproveitando op que vc disse… Você já usou o Joone? Qual a classe que eu devo escrever pra implementar um novo método de aprendizado? Você tem algum exemplo? Estou ainda pesquisando alguns outros frameworks, como o neuroph e o encog.

VocÊ indica algum deles? tem algum exemplo? O próximo passo para mim seria exatamente mudar o algoritmo de aprendizado. A função em todas as camadas que estou usando é a sigmóide (SigmoydLayer do Joone).

Como vocÊ desenvolveu essa sua rede? Que framework usou? Como escreveu o algoritmo de aprendizagem? Essas são as dúvidas que tão me deixando preocupado.

M

Olá gpmdf2

Só fiz alguns testes com o Joone, nada relevante. Mas parece que agora o Encog (antigo JOONE) tem o algoritmo de LM (Levenberg?Marquardt algorithm) o qual é bastante eficiente para treinamento de uma MLP.

Use a tangente hiperbólica (-1,+1).

Eu tenhos redes escritas em Java e em Matlab. O interessante de você mesmo implementar, é o conhecimento adquirido, além das otimizações específicas para cada tipo de problema. No entanto, um conhecimento de cálculo se faz necessário, principalmente se adotar métodos de segunda ordem, por isto que acabei indo para o matlab.

A

Olá

Alguém ai ja tentou usar o Javanns? Eu tou usando ele e n consigo fazer previsões com ele… =/
Se alguém souber de alguma coisa por favor me avisem!! :slight_smile:

M

Previsões :?: :?: :?: :lol:

Caso queira fazer predição, como configurou as entradas ?

A

Eu queria fazer predição de uma série temporal no Javanns.
Usei 12 entradas e uma saída. Como nesse exemplo abaixo e utilizei o algoritmo de treinamento Backpropagation para rede de Jordan-Elman.

SNNS pattern definition file V4.2
generated at Fri May 7 16:40:53 2010

No. of patterns : 239
No. of input units : 12
No. of output units : 1

Input pattern 1:

1.55299127531781
1.55526011184243
1.5576848628862
1.56171247537368
1.56440592308756
1.56600217887588
1.56653102572184
1.56863049530853
1.57224481112667
1.57275508737827
1.56511717955053
1.55712831438253

Output pattern 1:

1.55619673621098

J

Andrea Cavalcanti:
Eu queria fazer predição de uma série temporal no Javanns.
Usei 12 entradas e uma saída. Como nesse exemplo abaixo e utilizei o algoritmo de treinamento Backpropagation para rede de Jordan-Elman.

SNNS pattern definition file V4.2
generated at Fri May 7 16:40:53 2010

No. of patterns : 239
No. of input units : 12
No. of output units : 1

Input pattern 1:

1.55299127531781
1.55526011184243
1.5576848628862
1.56171247537368
1.56440592308756
1.56600217887588
1.56653102572184
1.56863049530853
1.57224481112667
1.57275508737827
1.56511717955053
1.55712831438253

Output pattern 1:

1.55619673621098

Para predição a arquitetura é a bayesiana. Não me lembro de nenhum framework com esse algoritmo.

Para ler:

http://catalogue.nla.gov.au/Record/1091486

J

gpmdf2:
Pessoal,

to montando uma rede neural e até agora o framework que eu escolhi pra usar foi o joone.

eu montei uma rede, consigo salvar, carregar, treinar e colocar pra funcionar (posso, por exemplo, depois de treinar, criar um array com varias entradas, usar um FOR para mostrar cada uma dessas entrada pra rede e assim ela me responder com a classificação).

eu usei a base de dados XOR (“ou” exclusivo) e o que a rede me retorna pra cada entrada é um numero. alguem ja usou o joone com esse exemplo? existerm alguns tutoriais que usam essa base, justamente para a pessoa aprender a usar o framwork. O que significam esses numeros? Como interpretar?? um exemplo da saida : 0.0468468468464645…

é sempre um numero fracionario com a parte fracionaria beeem grande… eu preciso fazer um threshold pra isso?
base de dados:
0; 0; 0
0; 1; 1
1; 0; 1
1; 1; 1

a saida da rede deveria ser essa mesmo ou deveria ter zeros e uns? (pois nessa arquivo, as duas primeiras colunas sao para treinamento, isto é, a base de verdade e a ultima coluna é para prendizado, funciona para aprendizado supervisionado).

Esse número que você postou se denomina margem de erro. É uma estatística do quanto a rede aprendeu. Quanto mais próximo ao zero, menor a chance da rede errar, ok?

Uma boa margem de erro se encontra entre <= 0.02… Quando a margem de erro se encontra nesse limite, diz-se que o treino convergiu.

Mas so um conselho. Não usem esses frameworks. É importante saber o que cada algoritmo faz. Um bom trabalho pode ser alcançado com um livro sobre rnas e outro de uma linguagem de programação qualquer.

M

Olá

Para predição veja sobre atraso de tempo nas entradas. Para obter um dado de hoje, se faz necessário as entradas serem t-1, t-2, …, t-n

E Backpropagation não é algoritmo é método.

J

mauro_schneider:
Olá

Para predição veja sobre atraso de tempo nas entradas. Para obter um dado de hoje, se faz necessário as entradas serem t-1, t-2, …, t-n

E Backpropagation não é algoritmo é método.

Ow mauro… só uma correção, o método se refere a metodologia de como fazer, ou seja um algoritmo.

M

juliocbq:
mauro_schneider:
Olá

Para predição veja sobre atraso de tempo nas entradas. Para obter um dado de hoje, se faz necessário as entradas serem t-1, t-2, …, t-n

E Backpropagation não é algoritmo é método.

Ow mauro… só uma correção, o método se refere a metodologia de como fazer, ou seja um algoritmo.

http://en.wikipedia.org/wiki/Backpropagation

Julio

Algoritmos são o QuickProp, LM, PLL, Cascor, etc, onde todos eles usam o método de Backpropagation

J

mauro_schneider:
juliocbq:
mauro_schneider:
Olá

Para predição veja sobre atraso de tempo nas entradas. Para obter um dado de hoje, se faz necessário as entradas serem t-1, t-2, …, t-n

E Backpropagation não é algoritmo é método.

Ow mauro… só uma correção, o método se refere a metodologia de como fazer, ou seja um algoritmo.

http://en.wikipedia.org/wiki/Backpropagation

Julio

Algoritmos são o QuickProp, LM, PLL, Cascor, etc, onde todos eles usam o método de Backpropagation

Sim, mas o backpropagation não deixa de ser um algoritmo também. Toda idéia transportada a uma lógica é um algoritmo.

Outra fonte:

http://www-speech.sri.com/people/anand/771/html/node37.html

Os outros algoritmos citados são baseados no backpropagation.

M

Olá Julio

Este é um erro constante (inclusive na literatura) e que aos poucos vem sendo modificado. Para lhe ajudar a entender o meu raciocínio, responda a seguinte pergunta:

Qual o objetivo do treinamento em uma rede do tipo MLP ?

Com a resposta da pergunta acima, você vai ver que não existe algoritmo de “backpropagation” e sim de otimização.

J

mauro_schneider:
Olá Julio

Este é um erro constante (inclusive na literatura) e que aos poucos vem sendo modificado. Para lhe ajudar a entender o meu raciocínio, responda a seguinte pergunta:

Qual o objetivo do treinamento em uma rede do tipo MLP ?

Com a resposta da pergunta acima, você vai ver que não existe algoritmo de “backpropagation” e sim de otimização.

Olá mauro,

acho que estamos falando de coisas similares, mas pensando em diferentes angulos. O nome do algoritmo é backpropagation, e não o algoritmo é de backpropagation. O que eu quis dizer logo acima no meu post é que qualquer metodologia que será transformada numa implementação é um algoritmo.

É correto dizer que o [b]backpropagation/b é um algoritmo de aprendizado.
No caso, quando citei seu post quis dizer que ali método = algoritmo.

J

mauro_schneider:
Olá Julio

Este é um erro constante (inclusive na literatura) e que aos poucos vem sendo modificado. Para lhe ajudar a entender o meu raciocínio, responda a seguinte pergunta:

Qual o objetivo do treinamento em uma rede do tipo MLP ?

Com a resposta da pergunta acima, você vai ver que não existe algoritmo de “backpropagation” e sim de otimização.

O objetivo do treinamento é a aproximação, e não a otimização.
Problemas de otimização são relacionados as AGs e variantes.

G

Pessoal, sei que a discussão aqui já tem um tempinho, mas estou precisando de uma ajudinha…

Estou precisando normalizar uma base de dados, ela tem valores com diferenças muito grandes, tem valores de 0 até números muito altos.

Até aí, tudo bem, vamos à normalização… Tenho uma algoritmo que pega os dados de um arquivo texto, linha a linha (a base é grande, mais de 400 mil linhas) e normaliza, gravando esses dados normalizados em outro arquivo texto.

Quando abro o arquivo normalizado, os valores estão numa notação que me parece ser potência, por exemplo : 1,00927348976234E-8

Como faço para que esse valores fiquem numa notação decimal pura, sem a potência??? Tipo… Ao invés dele elevar a -8, ele escrever o número direito, na íntegra?

Desde já, agradeço a ajuda!

M

seu proble está relacionado ao modo que o número é convertido para texto. por padrão, ele usa notação cientifica.

Este post tem alguns exemplos de como mudar isso

http://www.guj.com.br/posts/list/125138.java

mas se eu não me engano, na hora de reconstriur os numeros a partir do seu arquivo texto, não deveria dar nenhum problema.

Criado 1 de fevereiro de 2005
Ultima resposta 10 de dez. de 2010
Respostas 53
Participantes 15