Estou elaborando um trabalho com redes neurais,
o problema, eu acho, é que tenho várias váriaveis possiveis…
Não sei se é o melhor algoritmo de IA mas é assim…
Tenho um jogo de futebol e quero usar redes neurais para
determinar as ações dos jogadores…
Fiz o seguinte, como entrada defini vários ENUMS com valores
sequenciais 0.1, 0.2, 0.3 representando por exemplo, habilidade,
posição, estado, etc… e como saida teria varias ações que o jogador
poderia executar, tabém 0.1, 0.2, 0.3, 0.4, etc…
Em um primeiro teste hávia funcionado, mas do nada
começou a dar uns valores absurdos… por exemplo:
Eu treinei para 0.1 e 0.1 (2 entradas) ter como saida (0.35)
mas as vezes sai 0.36989795 o que considero correto, mas
as vezes sai 5.158140149663072E-6 totalmente sem sentido,
sendo que informei como entrada o mesmo que foi treinado (0.1 e 0.1)
Minha dúvida, posso usar valores muito baixos como entrada
e saida prevista ? ao invés de 0.1 usar 0.001 …
Percebi também que se treino d+ os resultados começam a ficar muito errado
como o exemplo acima do 5.158140149663072E-6
Acho que “descobri” o problema,
estou lendo o livro “Introduction to Neural Networks for Java”
e lá no exemplo do “XOR” ele usava 5000 iterações de treino
para um exemplo simples de 0.0 e 0.1
Por algum motivo que não consegui descobrir ainda,
utilizando valores de ponto flutuante maiores, tenho que
treinar a rede muito mais, de 5000 tive que colocar 100000
para obter os resultados desejados…
Agora a duvida, como quero algo dinâmico,
é aconselhavel ao invés de iterar sobre um numero
fixo de épocas, eu treinar até a taxa de erros ser menor
que um determinado valor desejado como por exemplo 0.001 ?
Valeu!
V
ViniGodoy
Sem descrever seu protocolo, fica difícil te ajudar:
a) De onde veio a base?
b) Usou alguma base de testes? Sua base de resultados é diferente da base de treinamento?
Cuidado com essa história de treinar até uma determinada margem de erro.
Muitas vezes você acaba especializando demais sua rede, o que torna ela viciada na sua base de treinamento.
Procure um algorítmos que façam treinamento com uso de bases de testes para obter generalização máxima.
J
juliocbq
O backpropagation requer que você normalize sua entrada. Não se pode trabalhar com valores flutuantes como input, senão seu treino pode nunca convergir. Treinar redes neurais é uma “arte” como dizem alguns especialistas.
<ahref="http://qnetv2k.com/Qnet2000Manual/html/qnet6sku.htm"class="onebox"target="_blank">http://qnetv2k.com/Qnet2000Manual/html/qnet6sku.htm</a><asideclass="onebox wikipedia"><headerclass="source"><ahref="https://en.wikipedia.org/wiki/Artificial_neural_network#Learning"target="_blank">en.wikipedia.org</a></header><articleclass="onebox-body"><divclass="aspect-image"style="--aspect-ratio:220/100;"><imgsrc="//upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Kernel_Machine.svg/220px-Kernel_Machine.svg.png"class="thumbnail"></div><h3><ahref="https://en.wikipedia.org/wiki/Artificial_neural_network#Learning"target="_blank">Artificialneuralnetwork|Learning</a></h3>
Thepossibilityoflearninghasattractedthemostinterestinneuralnetworks.Givenaspecifictasktosolve,andaclassoffunctionsF
{\displaystyle\textstyleF}
,learningmeansusingasetofobservationstofindf
∗
∈
F
{\displaystyle\textstylef^{*}\inF}
whichsolvesthetaski...
H
hitcurst
ViniGodoy:
Sem descrever seu protocolo, fica difícil te ajudar:
a) De onde veio a base?
b) Usou alguma base de testes? Sua base de resultados é diferente da base de treinamento?
Cuidado com essa história de treinar até uma determinada margem de erro.
Muitas vezes você acaba especializando demais sua rede, o que torna ela viciada na sua base de treinamento.
Procure um algorítmos que façam treinamento com uso de bases de testes para obter generalização máxima.
Opa, desculpem a demora, deu uns problemas aqui em santa-catarina
e não vi mais o fórum.
Então, a base que você diz é a entrada e a saida esperada ? Esta eu estou montando com um CSV, mais
ou menos assim:
Ali tem um header que é descartado,só para identificação, a classe (enum)
onde estão os valores de cada linha, e abaixo os valores que eu por reflexão.
As classes estão assim (uma parte delas):
O que não sei se é assim, as taxas de erro estão muito altas, o que
leva as uns valores muito fora. Cada vez que eu mando ele treinar
muda bastante as taxas de erro, algumas vezes ele treina rápido,
outras leva muito tempo e não fica com um valor aceitavel.
[quote=juliocbq]O backpropagation requer que você normalize sua entrada. Não se pode trabalhar com valores flutuantes como input, senão seu treino pode nunca convergir. Treinar redes neurais é uma “arte” como dizem alguns especialistas.
Quanto a normalizar as entradas, eu só achei sobre isso
no “Self-Organizing Map” no Backpropagation que eu li,
os valores devem estar entra 0 e 1.
V
ViniGodoy
Ok, mas vc tirou esses dados de onde? Da sua cabeça?
H
hitcurst
Sim
V
ViniGodoy
E desse jeito como vc pretende medir a qualidade da sua rede? Você não pode inferir qualquer coisa se você não tiver uma base de dados confiável.
H
hitcurst
E desse jeito como vc pretende medir a qualidade da sua rede? Você não pode inferir qualquer coisa se você não tiver uma base de dados confiável.
Não entendi direito, eu que estou definindo os valores,
é tipo uma simulação de futebol, eu tenho meus jogadores
em campo jogando, com base nas váriaveis do jogo e dos jogadores
eu pretendo decidir a ação do goleiro.
Se ele me retorna 0.001 ou algo próximo disto eu não faço nada (NAO_MOVER),
se ele retornar 0.117 eu executo a ação MOVER_ESQUERDA (0.120).
Ou será que o que estou tantando fazer não é possivel ? Seria um problema
J
juliocbq
hitcurst:
Quanto a normalizar as entradas, eu só achei sobre isso
no “Self-Organizing Map” no Backpropagation que eu li,
os valores devem estar entra 0 e 1.
Hitcurst, O modelo kohonen é usado para resolver problemas de agrupamento e reconhecimento de padrões. Para você ter uma idéia, um ocr usa uma rede kohonen para reconhecer caracteres. Back propagation
é o método de treino. Normalmente backpropagation é utilizada em redes com perceptrons.
Se o modelo da rede não encaixa no modelo do problema, o treino não converge.
Você está tentando resolver um problema com a ferramenta errada. Precisa rever o problema e buscar a ferramenta matemática certa para a solução do mesmo.
Dá uma lida na documentação da aforge.net. É uma biblioteca c# opensource, e implementa a maioria dos algoritmos de treino e a maioria dos modelos de redes. Possui um monte de exemplos solucionando vários tipos de problemas.