Etiqueta de mercado ou boas maneiras em um campo minado - página 21

 
grasn писал(а) >>

Enquanto estou criando, eu tenho que parecer um artista! Mas quando eu estou codificando ... :о)))

PS: Serega, é quase monopênico em MathCAD, mas em C++/FORTRAN ... será diferente, mas em MathCAD - para dizer de forma branda (para este caso em particular). E se você usar meios, isso contará ainda mais rápido, e se você usar corr, por exemplo, seu algoritmo "rápido" irá tartaruga :o). Como eles fazem isso, não sei, mas quanto à "soma" do operador - é muito mais rápido que o loop. Se você não o tem dessa maneira - então coloque uma nova versão.

Entendi.

Obrigado pela informação!

 
Neutron >> :

Não esqueça que é aconselhável ensinar tudo isso a cada contagem regressiva - não vai ser fácil.

Agora eu entendi! Eu estava contando todos os comitês em uma pilha.

Eu não vou aumentar o número de neurônios na camada oculta. Não vejo por que, funciona bem com dois.

Se você não se importa, eu gostaria de ir diretamente ao ORO, pois já tenho uma malha de duas camadas pronta e funcionando (mesmo com escalas "de fundo"), se estiver interessado - eu posso traçar o código.

 

Até agora, eis o que eu fiz:



d = 17;

w = 17*3 + 4 = 55;

P = 4*55*55/17 = 712;

------------------------------------------------------------------------


O algoritmo ORO, até agora, é calculado assim (apenas para os pesos da camada de saída):

// ----------------------------------------- ЭПОХА ---------------------------------------------------

for(int i = cikl; i > 2; i--)
{
out = OUT(i); // Получаем выход сетки
target = (Close[i]-Close[i+1])/Close[i+1];--------------------// Получаем целевое значение
delta = target - out;-----------------------------------------// Вычитаем выход сетки из целевого значения
pr = th(out);-------------------------------------------------// Вычисляем производную выходного сигнала
pr = 1 - pr*pr;-----------------------------------------------//

for(int n = 0; n < 4; n++)
{
Corr[n] += delta * pr * D2[n];--------------------------------// Вычисляем ошибку для каждого веса и суммируем её за всю эпоху
Norm[n] += Corr[n]*Corr[n];-----------------------------------// Считаем норму вектора коррекций для каждого веса за всю эпоху
}
}
// ------------------------------------- КОНЕЦ ЭПОХИ --------------------------------------------------

// ----------------------------------- КОРРЕКЦИЯ ВЕСОВ ------------------------------------------------

for(i = 0; i < 4; i++)

W2[i] += Corr[i]/MathSqrt(Norm[i]);



Parece funcionar! Mas algo ainda está errado. Mais de 1000 épocas, todos os pesos se tornaram muito pequenos:

W2 [0] = 0,0876 W2 [1] = 0,0772 W2 [2] = -0,0424 W2 [3] = -0,05

O que eu perdi e como agora empurro o erro para os pesos de entrada?

 
Prival писал(а) >>

Veja as mensagens particulares. Peço desculpas por escrever aqui, mas muitas vezes elas não refletem as mensagens.

Sergey, verifique suas mensagens particulares.

para paralisar

Responderei a você um pouco mais tarde.

Estou trabalhando nos dados de entrada para o NS e a idéia me veio à mente. A propósito, por que você multiplicou o número de pesos por 3 ao calcular o comprimento do vetor de treinamento? Eu entendo que você deveria ter w=17+4 e é isso aí! Você está treinando cada membro do comitê com seu próprio vetor pessoal...

 
Neutron >> :

...A propósito, por que você multiplicou o número de pesos por 3 ao calcular o comprimento do vetor de treinamento? Presumo que você deveria ter w=17+4 e é isso! Você está treinando cada membro do comitê com seu próprio vetor pessoal...

Neste caso, o vetor de entrada é o mesmo. É lido uma vez em cada contagem e depois cada membro do comitê "olha" através de seus "pontos" pessoais (pesos) e faz um julgamento.

Claro, pode ser lido para cada membro do comitê separadamente, mas de que adianta se o resultado for o mesmo? O vetor de entrada é de 16 incrementos consecutivos do quociente + uma única entrada.

А... Eu entendi! Sim, eu costumava ter dois vetores de entrada diferentes: os incrementos de kotir com dt segundo a série Fibo - 2,3,5,8... e a outra pela série de Luke - 3,4,7,11... e havia apenas 2 membros do comitê. Naquela época, cada membro do comitê lia um vetor diferente, mas agora simplifiquei as coisas para me concentrar na compreensão do ORO. Portanto, o vetor, neste caso, é um só.

Será que os pesos poderiam ter caído tanto porque eu só ensinei a segunda camada?

 

Bem, ainda acontece: w=17+4 e cada membro tem os mesmos vetores.

Paralocus, eis o que eu penso. Não vamos ficar à frente da curva e resolver uma Perspectron bilayer não-linear com saída não-linear em MQL e obter um resultado positivo. Depois, você passará para um comitê de redes (se necessário).

O que você acha?

 
Neutron >> :

Bem, ainda acontece: w=17+4 e cada membro tem os mesmos vetores.

Paralocus, eis o que eu penso. Não vamos ficar à frente da curva e resolver uma Perspectron bilayer não-linear com saída não-linear em MQL e obter um resultado positivo. Depois, você passará para um comitê de redes (se necessário).

O que você diz?

OK! Assim, tiramos todos os comissários e o presidente. Uma espécie de "balas de gangbusters"... -:) >> vamos fazer isso.

P/S exceto um - o primeiro

 

Bem, então vamos lá!

1. encontrar o erro na saída do último neurônio: d2out=X[-1]-OUT2, (quero dizer numeração como MQL e esta é a contagem do "futuro").

2. recalculá-lo levando em conta a não-linearidade em sua entrada: d2in=d2out*(1-OUT2^2)

3. o mesmo erro vai para a saída de cada neurônio da primeira camada por seu axônio! Agora, este erro em suas saídas é d1out e repetimos o procedimento (2) recalculando em sua entrada: d1[1]in=d1out*(1-OUT1[1]^2) e da mesma forma para o segundo neurônio da camada oculta.

 
Os pesos são corrigidos por erro calculado, ou ainda não?
 

Não.

Primeiro, calculamos a micro-correção para cada peso: dw=in*din - regra delta - multiplicamos o sinal de entrada pelo erro aplicado a uma determinada entrada. Em seguida, resumimos isso em um sumário separado para cada peso sobre todas as amostras do vetor de treinamento. Os pesos não são corrigidos dentro de uma iteração da época de treinamento. Somente as microcorreções e seus quadrados são acumulados (em outra víbora).

P.S. Eu corrigi o erro no posto acima. A derivada é encontrada da seguinte forma: *(1-OUT2^2).