OK, voila si dessous la partie du code qui a permis de creer le réseau suivi des principales commandes:
erreur = apprentissage.RunEpoch(entrees, sorties); (pour l'apprentissage)
double erreurVal = computiation(entreesval, sortiesdis); (pour la validation) :
Ma question est comment pourrais-je faire plusieurs pas en avant (réinjecter les sorties) sur mon reseau de neurones car ce dernier ne donne pas de résultats satisfaisants et merci d'avance
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Threading;
using System.IO;
using AForge.Neuro;
using AForge.Neuro.Learning;
using AForge.Controls;
using ZedGraph;
using AForge.Genetic;
namespace Network
{
public partial class Form1 : Form
{
double erreur;
int nbreNeurHidLay = 3;
double pasDApp = 0.1;
double momentum = 0;
int j;
double[][] entrees = new Double[119][];
double[][] sorties = new Double[119][];
double[][] entreesval = new Double[118][];
double[][] sortiesdis = new Double[118][];
double[][] entreestest = new Double[7][];
double[][] sortiestest = new Double[7][];
ArrayList tabDynErr = new ArrayList();
ArrayList tabDynVal = new ArrayList();
ArrayList tabCompO = new ArrayList();
ArrayList sortiescalculées = new ArrayList();
bool stop = false;
double[] Données_semaine_RNA = new double[246];
//double[] PIBsemaine5ans = new double[265];
IActivationFunction fonction;
ActivationNetwork reseau;
BackPropagationLearning apprentissage;
public Form1()
{
Control.CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
initialisation();
}
public void initialisation()
{
initgraph();
limErreurfield.Text = "0,01";
limIterField.Text = 500.ToString();
pasDAppField.Text = pasDApp.ToString();
MomentumField.Text = momentum.ToString();
alphaField.Text = "2";
nbreNeuField.Text = nbreNeurHidLay.ToString();
fonction = new BipolarSigmoidFunction(double.Parse(alphaField.Text));
reseau = new ActivationNetwork(fonction, 3, int.Parse(nbreNeuField.Text), 1);
apprentissage = new BackPropagationLearning(reseau);
apprentissage.LearningRate = double.Parse(pasDAppField.Text);
apprentissage.Momentum = double.Parse(MomentumField.Text);
gotya("C:\\Data\\Données_semaine_RNA3.txt", Données_semaine_RNA);
//gotya2("C:\\Data\\PIB_semaine5ans.txt", PIBsemaine5ans);
for (int i = 0; i < 119; i++)
entrees[i] = new double[] { Données_semaine_RNA[i], Données_semaine_RNA[i+1], Données_semaine_RNA[i+2]};
for (int i = 0; i < 119; i++)
sorties[i] = new double[] { Données_semaine_RNA[i + 3] };
for (int i = 0; i < 118; i++)
entreesval[i] = new double[] { Données_semaine_RNA[i + 119], Données_semaine_RNA[i + 120], Données_semaine_RNA[i + 121] };
for (int i = 0; i < 118; i++)
sortiesdis[i] = new double[] { Données_semaine_RNA[i + 122] };
for (int i = 0; i < 7; i++)
sortiestest[i] = new double[] { Données_semaine_RNA[i + 236], Données_semaine_RNA[i + 237], Données_semaine_RNA[i + 238] };
for (int i = 0; i < 7; i++)
sortiestest[i] = new double[] { Données_semaine_RNA[i + 239] };
}
public void learnin() {
int j = 0, cpt=0;;
while (!stop)
{
erreur = apprentissage.RunEpoch(entrees, sorties);
double erreurVal = computiation(entreesval, sortiesdis);
listErreur.Items.Add(j.ToString("000") + "\t" + erreur.ToString("0.######") + "\t\t" + erreurVal.ToString("0.######") );
tabDynErr.Add(erreur);
tabDynVal.Add(erreurVal);
listErreur.SelectedIndex = listErreur.Items.Count - 1;
if (erreurVal<double.Parse(limErreurfield.Text) || j+1>int.Parse(limIterField.Text))
{
arreter.Enabled = false;
stop = true;
CreerGraphique(zg1);
}
/*if (j!=0 && (double)tabDynVal[j] > (double)tabDynVal[j - 1])
{
cpt++;
if (cpt > 10)
{
arreter.Enabled = false;
stop = true;
CreerGraphique(zg1);
}
}
//*/
j++;
}
}
private double computiation(double[][] entreesval, double[][] sortiesdis)
{
double totalError = 0;
for (int i 0, inputVectorsAmount entreesval.Length; i < inputVectorsAmount; i++)
{
double[] computedOutput = reseau.Compute(entreesval[i]);
tabCompO.Add(computedOutput[0]);
for (int j 0, outputLength sortiesdis[0].Length; j < outputLength; j++)
{
double error = sortiesdis[i][j] - computedOutput[j];
totalError += error * error;
}
}
return totalError;
}
private void commencer_Click(object sender, EventArgs e)
{
zg1.GraphPane.CurveList.Clear();
zg1.Invalidate();
commencer.Enabled = false;
arreter.Enabled = true;
stop = false;
// learnin();
Thread thread = new Thread(new ThreadStart(learnin));
thread.Start();
}
private void arreter_Click(object sender, EventArgs e)
{
arreter.Enabled = false;
stop = true;
CreerGraphique(zg1);
}
public void gotya(String filename, Double[] tabData)
{
TextReader sr = new StreamReader(filename);
string contents = sr.ReadToEnd();
string[] myArray = contents.Split('\t');
for (int j = 0; j <246; j++)
{
// string a = myArray[j];
tabData[j] = Convert.ToDouble(myArray[j]) / 4175.9;
}
}