L'étiquette du marché ou les bonnes manières dans un champ de mines - page 31

 
paralocus писал(а) >>

Salut Neurton! Bref, pas encore de chance avec la double couche.

J'ai écrit un perceptron à une couche avec ORO et je l'ai fait tourner toute la journée d'hier. Il se comporte bizarrement. Il apprend et n'apprend pas, et est catastrophiquement dépendant du nombre d'époques.

Mes résultats sont donc les suivants : 8 epochs - la grille n'apprend pas, 12 epochs - la grille apprend, 13 epochs - la grille n'apprend pas.

En bref, les résultats se vantent de ce que je ne peux pas encore.

Dans tous les cas, je vais décrire un algorithme que j'ai mis en place. Voir si j'ai raté quelque chose.

1. Le perceptron a D entrées binaires, dont l'une est une constante +1.

2) La BP utilisée est une progression séquentielle des cotiers sur un certain nombre d'Open.

3. Tous les poids sont initialisés avec de petites valeurs aléatoires de l'ordre de +/-1 avant de commencer.

4. La longueur du vecteur d'apprentissage est calculée comme suit : P = 4 * D*D/D = 4*D.

5. Le vecteur d'apprentissage est transmis à l'entrée de la grille et l'erreur de grille est calculée comme suit : Qs = Test - OUT, où Test est la valeur de BP à n+1, c'est-à-dire à la lecture suivante, OUT est la sortie de la grille à n lectures.

6. Pour obtenir la valeur de l'erreur aux entrées Qs, l'erreur de grille Qs est multipliée par la dérivée de la fonction d'écrasement (1 - OUT+OUT): Q = Qs *(1 - OUT*OUT).

7. Le vecteur de correction pour chaque poids entrant dans un neurone COR[i] += Q*D[i] est calculé et accumulé pendant l'époque.

8. SQR[i] += COR[i]*COR[i] est calculé séparément et accumulé pendant toute l'époque pour chaque poids, inclus dans le neurone.

9. A la fin d'une époque, pour chaque poids, la correction personnelle est calculée et ajoutée à ce poids W[i] += COR[i]/SQR[i]

J'ai essayé d'utiliser un facteur de (1 - j/N), ainsi que de randomiser les poids dont les valeurs absolues ont augmenté de plus de 20. La randomisation aide mieux.

P.S a corrigé une erreur dans le texte.

paralocus, colle ta copine sur l'entrée Ceci :

Au lieu d'ouvrir les prix. Et affichez le résultat. S'il n'apprend pas, alors l'erreur est catastrophique et vous devez faire de sérieuses recherches.

P.S. Divisez-vous par la norme vectorielle ou par le carré ? Je devrais le faire par norme, mais ce que vous avez écrit ressemble à une somme de carrés sans extraction de la racine.

 

Merci, je vais l'essayer.

Voici les résultats pour AUDUSD, H4, D = 13, 33 époques. Les tests ont été effectués sur une partie de l'historique de 2009.01.08 à 2009.05.21

Il y a un peu plus de points (nombre d'époques : 31, 25, 14, 10, 7) obtenus avec l'optimiseur, mais les résultats sont moins bons sur ces points.





P.S. Exactement ! La racine est ... carrée ... J'ai oublié de l'enlever !

 
paralocus писал(а) >>

P.S. Exactement ! La racine est... carrée... J'ai oublié de l'enlever !

Comme dans la blague de Chapaev ! :-)

 
Neutron >> :

C'est comme la blague de Chapaev ! :-)

- :) ... Pleurant, mais aiguisant son sabre...

 

Non, Petya a arraché tous les buissons de la cour - on lui a demandé de trouver la racine carrée :-)

Tiens, regarde. Il s'agit d'un Ns-ca à double couche avec deux entrées et 8 époques d'apprentissage sur chaque échantillon. Il s'agit de 500 échantillons au total et la probabilité de prédiction correcte est calculée comme la moyenne de 10 expériences indépendantes (pour la signification statistique des résultats) :

Le rouge montre le résultat sur l'échantillon d'entraînement, le bleu sur l'échantillon de test. Vous pouvez voir que les résultats ne sont pas très différents et c'est une bonne chose, car cela montre que le réseau n'est pas surentraîné. Souvent, l'erreur consiste à sélectionner un vecteur d'entraînement trop court (inférieur à la longueur optimale), et presque 100% des impacts sur l'échantillon d'entraînement. En même temps, ils ne regardent pas les résultats de prédiction de l'échantillon qui n'a pas participé à la formation ! Dans ce cas, le résultat est généralement proche de zéro. C'est du surentraînement, la grille a simplement appris la leçon par cœur et est incapable de se composer. Ils se demandent ensuite pourquoi ils ont été recalés.

 

Hourra ! !!

Mon dépôt vient de dépasser 1K !

Neutron, les entrées binaires de la grille sont-elles formées par la formule de votre échantillon de test ?

 

Je divise la BP construite par cette formule en segments de la même tranche de prix H et je prends la première différence. J'arrondis les incréments à +/-1 et j'essaie de les prévoir. Hn Fig. L'horizon de négociation H est représenté en pips sur l'axe des abscisses et la probabilité est représentée sur l'axe des ordonnées. Les entrées sont donc binaires.

 

C'est comme ça que j'ai compris. Pour regarder cette formule avec mes yeux, je l'ai mise sur le graphique comme un indicateur. J'ai mis tous ces éléments sur la grille d'entrée, mais je n'arrive pas à trouver comment voir les résultats.

C'est-à-dire que je ne peux pas le faire avec un testeur. Vous pouvez seulement imprimer les poids et voir comment c'est... vivant ou non.

Non, ce n'est pas ça. Je n'ai pas divisé la PA résultante en segments de même incrément, mais j'ai pris des incréments consécutifs de la PA sur des comptes D.

 
paralocus писал(а) >>

C'est comme ça que j'ai compris. Pour regarder cette formule avec mes yeux, je l'ai mise sur le graphique comme un indicateur. J'ai mis tous ces éléments sur la grille d'entrée, mais je n'arrive pas à trouver comment voir les résultats.

C'est-à-dire que je ne peux pas le faire avec un testeur. Vous pouvez seulement imprimer les poids et voir comment c'est... vivant ou non.

Non, ce n'est pas ça. Je n'ai pas divisé la PA résultante en segments d'incréments égaux, mais j'ai pris des incréments consécutifs de PA sur des comptes D.

Que diriez-vous d'afficher les poids via Comment() ?

 
FION >> :

Les poids peuvent-ils être affichés par le biais de Comment() ?

Vous pouvez le faire, mais ce n'est pas pratique, car chaque appel ultérieur de Comment() "bouchera" les résultats de la sortie précédente, puisqu'elle sera effectuée en utilisant les mêmes coordonnées graphiques que la précédente. Par conséquent, Print() est préférable ;