Organisation
Le management de Gaz de France repose sur un Comité exécutif et quatre Branches opérationnelles Quatre fonctions de pilotage sont également rattachées au Président Directeur Général: stratégie, communication, audit et risques, et délégation aux cadres dirigeants du Groupe
Gaz de France a pour ambition de fournir de l’énergie et des services à ses clients au meilleur prix, de s’imposer comme un gestionnaire d’infrastructures de référence en Europe, d’être un acteur engagé du développement durable et de créer de la valeur pour ses actionnaires.
Activités
• Acheter Gaz de France est le 4 ème acheteur mondial de gaz naturel et dispose du portefeuille d’approvisionnement le plus diversifié en Europe C’est pourquoi Gaz de France peut garantir à ses clients la fourniture d’une énergie compétitive
Gaz de France vend à ses clients du gaz, de l’électricité et des services en France et en Europe Le Groupe est le 3 ème opérateur de services énergétiques en France et le 2 ème en Italie
Etre producteur est le fruit d’une politique volontariste de diversification du portefeuille d’approvisionnements du Groupe Depuis 2005, Gaz de France produit également de l’électricité
• Etre leader du GNL en Europe
Gaz de France est le 2 ème acteur du gaz naturel liquéfié (GNL), le 2 ème opérateur de réception de GNL en Europe et le 5 ème importateur mondial En 2005, le GNL a représenté 26
% des approvisionnements de long terme de Gaz de France
• Gérer des infrastructures Gaz de France investit significativement sur son réseau en France et renforce ses positions en Europe, pour s’imposer comme un gestionnaire d’infrastructures de référence.
Présentation de la Direction Exploration Production
Accueil des stagiaires
La Direction Exploration Production de Gaz de France accueille régulièrement de nombreux stagiaires L’habitude de travailler avec des stagiaires rend leur accueil chaleureux et facilite leur intégration au sein de leur équipe de travail Les stagiaires ont de nombreux avantages au sein de cette entreprise, comme le temps de travail de 35 heures par semaine, le restaurant du site à prix correct, la possibilité d’accéder à la bibliothèque, à la vidéothèque etc
2 CONTEXTE DU STAGE : PROJET MODEAU
Stockages de gaz en nappe aquifère
Les nappes aquifères, qui contiennent le plus souvent de l’eau à l’état naturel, sont utilisées pour stocker du gaz dans les pores des roches qui les constituent Les structures géologiques sont des anticlinaux couverts par une roche imperméable (argiles) Le gaz est injecté durant l’été pour être stocké, puis soutiré en hiver afin d’être distribué aux clients Le processus de production et de stockage se déroule sur toute l’année
Dans la nappe aquifère, le gaz est injecté au-dessus de l’eau, donc lorsque le puits de production soutire le gaz, il induit également une production d’eau qui perturbe l’exploitation des sites et représente un cỏt important lors du traitement
Figure 2-1: Stockages de gaz en nappe aquifère
Projet MODEAU
L’eau produite lors du soutirage du gaz des stockages en nappe aquifère a un impact sur les cỏts d’exploitation et la disponibilité des installations Cet impact tend à s’accroỵtre avec les contextes d’exploitation à venir : accès des tiers aux stockages, irrégularité des cycles de production Les objectifs du projet sont :
• fournir des outils de prédiction de la production d’eau et de ses impacts en fonction des conditions d’exploitation et de l’état du stockage ;
• fournir des rốgles de conception de la chaợne de l’eau de production (technologie, configuration et dimensionnement)
Le projet MODEAU (MOMOMOMOdélisation des venues DDDD’EAUEAUEAUEAU ) s’intéresse au sous au sous au sous au sous -sol et aux puits-sol et aux puitssol et aux puitssol et aux puits
L’un des axes du projet consiste à prộvoir les arrivộes d’eau sous forme de ô bouchons ằ des puits vers les séparateurs Pour cela une technique basée sur les réseaux de neurones a été envisagée.
Essais à Cerville
Bouchons
L’analyse des données fournies par le L.I.T révèle un point important : les bouchons sont préférentiellement, voire exclusivement, générés par les reliefs de la collecte La mécanique est la suivante : si la vitesse du gaz est inférieure à une vitesse seuil, l’eau s’accumule dans le point bas jusqu’à créer des pertes de charges importantes (et détectables), puis est brusquement emportée vers le séparateur dès que la vitesse du gaz augmente, même très légèrement L’eau emportée constitue alors un bouchon qui est traité au niveau du séparateur par des purges successives à haute fréquence Le risque dans ce cas est de mettre le séparateur en sécurité et de provoquer une gêne à l’exploitation
Figure 2-4 : niveau d’eau dans le séparateur et indication des purges Mise en évidence d’un bouchon d’eau
Données L.I.T et outil de gestion des bouchons d’eau
Suite aux précieux enseignements de l’analyse des données fournies par le L.I.T la piste stochastique de la prévision des bouchons d’eau au séparateur a été renforcée : un modèle mécanique du cheminement des bouchons avec les effets tampon des points bas de la collecte avec le logiciel OLGA est plus laborieuse En revanche une méthodologie basée sur les mộthodes d’apprentissage paraợt pertinente Une rencontre avec l’ộquipe concernộe de la DR a confirmé la faisabilité d’un tel projet, et la mise au point d’un prototype est prévue pour
L’acquisition et l’analyse des données du L.I.T sont assez lourde Si l’intérêt de cet outil est confirmé, il sera nécessaire d’intégrer l’acquisition et le traitement automatique.
Objectifs du stage
Le stage s’inscrit dans la partie qui cherche à ô fournir des outils de prộdiction de la production d’eau ằ Son objectif est donc de prộdire l’occurrence des bouchons d’eau dans les réseaux de collecte des stockages Le travail effectué au cours du stage peut être divisé en plusieurs parties :
• Analyser et préAnalyser et pré-Analyser et préAnalyser et pré -traiter les données fournies par le L.I.T traiter les données fournies par le L.I.T traiter les données fournies par le L.I.T traiter les données fournies par le L.I.T Les données ont été enregistrées sur plusieurs puits du stockage de Cerville au cours des campagnes de soutirage de 2006 et 2007 Avant de les utiliser, il faut détecter et corriger des données erronées, compléter les données manquantes
• Tester différentes méthoTester différentes méthodes d’apprentissage pour prévoir les quantités d’eau Tester différentes méthoTester différentes méthodes d’apprentissage pour prévoir les quantités d’eau des d’apprentissage pour prévoir les quantités d’eau des d’apprentissage pour prévoir les quantités d’eau produites produitesproduites produites ; je dois utiliser différents modèles de réseaux de neurones pour prédire l’arrivée des bouchons d’eau, analyser et évaluer les résultats de chacun d’entre eux, et enfin sélectionner le meilleur
• Mettre en place une maquetteMettre en place une maquette ; en se basant sur les résultats obtenus, je vais choisir le Mettre en place une maquetteMettre en place une maquette modèle qui pourra être appliqué en exploitation sur site
• Evaluer la pertinence d’un tel outil pour l’aide à l’exploitation Evaluer la pertinence d’un tel outil pour l’aide à l’exploitation Evaluer la pertinence d’un tel outil pour l’aide à l’exploitation Evaluer la pertinence d’un tel outil pour l’aide à l’exploitation.
Logiciel utilisé
MATLAB est un logiciel commercial de calcul interactif Il permet de réaliser des simulations numériques basées sur des algorithmes d’analyse numérique Il peut donc être utilisé pour la résolution approchée d’équations différentielles, d’équations aux dérivées partielles ou de systèmes linéaires, etc
J’ai utilisé le logiciel MATLAB au cours de mon stage, c’est un logiciel très puissant et il dispose en plus d’une boợte à outils dộdiộe à l’apprentissage et la simulation des rộseaux de neurones (Neural Network Toolbox) dont je me suis servi pour réaliser mes tests
Les méthodes d’apprentissage automatique ont montré leur utilité dans de nombreux domaines et ont permis de résoudre un grand nombre de problèmes industriels, c’est pourquoi le projet MODEAU a décidé de faire appel à ce type de technologie pour résoudre le problème des bouchons d’eau
Parmi les techniques d’apprentissage, les réseaux de neurones ont déjà fait leur preuve et sont largement employés dans les systèmes de contrôle-commande.
Introduction
Les réseaux de neurones sont composés d’éléments simples (ou neurones) fonctionnant en parallèle Ces éléments ont été fortement inspirés par le système nerveux biologique
Comme dans la nature, le fonctionnement du réseau (de neurone) est fortement influencé par la connexion des ộlộments entre eux On peut entraợner un rộseau de neurones pour une tâche spécifique (reconnaissance de caractères par exemple) en ajustant les valeurs des connections (ou poids) entre les éléments (neurones)
En général, l’apprentissage des réseaux de neurones est effectué de sorte que pour une entrée particulière présentée au réseau corresponde une cible spécifique L’ajustement des poids se fait par comparaison entre la réponse du réseau (ou sortie) et la cible, jusqu’à ce que la sortie corresponde (au mieux ?) à la cible On utilise pour ce type d’apprentissage dit ôsupervisộ ằ un nombre consộquent de couples entrộe/sortie
Figure 3-1 : principe de l’apprentissage des réseaux de neurones
Les rộseaux de neurones ont ộtộ entraợnộs pour exộcuter des fonctions complexes dans divers champs, incluant la reconnaissance des formes, l’identification, la classification, la parole, la vision, et les systèmes de commande.
Modèle de neurone et Architectures de réseau
Modèle de neurone
3.2.1.1 3.2.1.1 3.2.1.1 3.2.1.1 Neurone simpleNeurone simpleNeurone simpleNeurone simple
Un neurone avec une entrộe scalaire simple et aucun biais apparaợt du cụtộ gauche ci- dessous :
L’entrée scalaire p est transmise par une connexion qui multiplie sa force par le poids scalaire w pour former le produit wp Ici l’entrée poids wp est le seul argument de la fonction de transfert f, qui produit la sortie scalaire a Le neurone du côté droit a un biais scalaire b
On peut voir le biais ajouté au produit wp comme un décalage de la fonction f vers la gauche par une quantité b Le biais est comme un poids, sauf qu’il a une entrée constante de 1
La net entrée n est la somme de l’entrée poids wp et du biais b : b wp n = +
Cette somme est l’argument de la fonction de transfert f, typiquement une fonction d’étape ou une fonction sigmọde, qui prend l’argument n et produit le rendement a Notons que w et b sont les deux paramètres scalaires réglables du neurone L’idée principale des réseaux de neurones est que de tels paramètres peuvent être ajustés de sorte que le réseau montre le comportement désiré Ainsi, on peut former le réseau pour faire un travail particulier en ajustant le poids ou le biais ou peut être le réseau lui-même ajustera ces paramètres pour atteindre un certain but désiré
3.2.1.2 3.2.1.2 3.2.1.2 3.2.1.2 Fonctions de transfertFonctions de transfertFonctions de transfertFonctions de transfert
Il y a plusieurs types de fonctions de transferts, trois des fonctions les plus utilisées généralement sont montrées ci-dessous :
Fonction Hard-limit Fonction linéaire Fonction Log-Sigmọd
Figure 3-3 : Les fonctions de transfert
3.2.1.3 3.2.1.3 3.2.1.3 3.2.1.3 Neurone avec le vecteur d’entréeNeurone avec le vecteur d’entréeNeurone avec le vecteur d’entréeNeurone avec le vecteur d’entrée
Un neurone avec un vecteur d’entrée simple de R éléments est montré ci-dessous Ici les éléments entrés d’individup 1 , p 2 , , p R sont multipliés par des poids w 1 , 1 , w 1 , 2 , , w 1 , R
Leur somme est simplement WpWpWp, le produit scalaire de la matrice WWp WWW et du vecteur pppp
Où R = nombre d’éléments dans le vecteur d’entrée
Figure 3-4 : Neurone avec le vecteur d’entrée
Le neurone a un biais b, qui est additionné avec les entrées poids pour former ? net entrée n Cette somme, n, est l’argument de la fonction f b p w p w p w n= 1 , 1 1+ 1 , 2 2 + + 1 , R R +3.2.2
Architectures de réseau
Deux ou plus des neurones montrés ci-dessus peuvent être combinés dans une couche, et un réseau particulier pourrait contenir une ou plusieurs couches
3.2.2.1 3.2.2.1 3.2.2.1 3.2.2.1 Une couche de neuronesUne couche de neuronesUne couche de neuronesUne couche de neurones
Un réseau d’une couche avec R éléments d’entrées et S neurones :
R= nombre d’éléments dans vecteur d’entrée
S= nombre de neurones dans la couche
Figure 3-5 : Une couche de neurones
Dans ce réseau, chaque élément du vecteur d’entrée est relié à chaque neurone entré par la matrice de poids W
Le nombre d’entrées à une couche peut différer du nombre de neurones (c’est à dire, R n’est pas nécessairement égal à S) Une couche n’est pas contrainte pour avoir le nombre de ses entrées égales au nombre de ses neurones
3.2.2.2 3.2.2.2 3.2.2.2 3.2.2.2 Neurone multicoucheNeurone multicoucheNeurone multicoucheNeurone multicouche
Un réseau peut avoir plusieurs couches Chaque couche a une matrice de poids W, un vecteur de biais b, et un vecteur de sortie a
Le réseau montré ci-dessus a les entrées R1, les neurones S1 dans la première couche, les neurones S2 dans la deuxième couche, etc Il est commun pour les différentes couches qui elles-même ont différents nombres des neurones Une entrée constante 1 est ajoutée au biais pour chaque neurone
Notons que les sorties de chaque couche intermédiaire sont les entrées à la couche suivante Ainsi la couche 2 peut être analysée comme réseau d’une couche avec les entrées S1, les neurones S2, et une matrice du poids W2 S2xS1 L’entrée à la couche 2 est a1, la sortie est a2 Maintenant, tous les vecteurs et matrices d’une couche 2 ont été identifiés, ils peuvent être traités comme réseau à une seule couche Cette approche peut être adoptée avec n’importe quelle couche du réseau
Les réseaux Multicouches sont puissants Par exemple, un réseau de deux couches, ó la première couche est sigmọde et la deuxième couche est linéaire, permet d’approcher n’importe quelle fonction (avec un nombre fini de discontinuités) Ce type de réseau à deux couches est employé intensivement dans la méthode dite Backpropagation
3.2.2.3 3.2.2.3 3.2.2.3 3.2.2.3 Structures de donnéesStructures de donnéesStructures de donnéesStructures de données
Le format des données d’entrée va affecter l’évolution des poids et des biais des réseaux de neurones lors de leur apprentissage
• Rộseaux statiques (Apprentissage par ôRộseaux statiques (Apprentissage par ô paquetRộseaux statiques (Apprentissage par ôRộseaux statiques (Apprentissage par ôpaquetpaquetpaquet ằ)ằ)ằ)ằ)
Un réseau dit statique est un réseau qui ne contient pas de connexion arrière (feedback ou delay) Par conséquent, on peut lui présenter les données en entrée dans n’importe quel ordre, cela n’influencera pas l’évolution de ses poids lors de la phase d’apprentissage Il est alors préférable de lui donner tout le jeu de donnée en un seul coup lors de la phase d’apprentissage On parle alors d’apprentissage par paquet (ô batch training ằ) Les rộseaux ô feedforward ằ ne peuvent pas simuler des processus dộpendant du temps
• Rộseaux dynamiqueRộseaux dynamiques (Apprentissage ôRộseaux dynamiqueRộseaux dynamiques (Apprentissage ôs (Apprentissage ôs (Apprentissage ô sộquentielsộquentielsộquentiel ằ)sộquentielằ)ằ)ằ)
Par contre, si l’on veut simuler un processus qui dépend du temps, alors on pourra utiliser un réseau de neurones contenant des connections arrières L’ordre de présentation du jeu de données au réseau de neurone sera alors primordial On parle alors d’apprentissage séquentiel
3.2.2.4 3.2.2.4 3.2.2.4 3.2.2.4 Modèles d’apprentissagesModèles d’apprentissagesModèles d’apprentissagesModèles d’apprentissages Cette section décrit deux modèles différents d’apprentissages
L’apprentissage ô par paquet ằ (batch training) du rộseau consiste à ajuster les poids et biais en présentant les vecteurs d’entrée/sortie de tout le jeu de données
L’apprentissage ô pas à pas ằ ou ô sộquentiel ằ (incrộmental training) consiste à ajuster les poids et biais en présentant les composantes du vecteur d’entrée/sortie les unes après les autres Ce type d’apprentissage est souvent qualifiộ d’apprentissage ô en ligne ằ (ô on line ằ training) ou ô adaptatif ằ (ô adaptive ằ training)
L’apprentissage permet aux réseaux de neurones de réaliser des taches complexes dans différents types d’application (classification, identification, reconnaissance de caractères, de la voix, vision, système de contrôle…) Ces réseaux de neurones peuvent souvent apporter une solution simple à des problèmes encore trop complexes ne pouvant être résolus rapidement par les ordinateurs actuels (puissance de calcul insuffisante) ou par un manque de connaissances
La mộthode d’apprentissage dite ô supervisộ ằ est souvent utilisộe mais des techniques d’apprentissage non supervisées existent pour des réseaux de neurones spécifiques Ces réseaux peuvent, par exemple, identifier des groupes de données (réseaux de Hopfield)
Les réseaux de neurones ont une histoire relativement jeune (environ 50 ans) et les applications intéressantes des réseaux de neurones n’ont vu le jour qu’il y a une vingtaine d’année (développement de l’informatique)
Exemple de réseaux de neurones Exemple de réseaux de neurones Exemple de réseaux de neurones Exemple de réseaux de neurones a) Réseau entièrement bouclé (carte topologique) b) Réseaux avec connexions arrières (réseaux récurrents ou feedback) c) Rộseau ô ordonnộ ằ sans connexion arriốre (rộseau feedforward)
Figure 3-7 : Exemples des réseaux de neurones
Le perceptron
Introduction
Rosenblatt a créé beaucoup de variations du perceptron Un des plus simple est un réseau d’une couche dont les poids et les biais peuvent ờtre entraợnộs pour produire un vecteur de cible correct correspondant au vecteur d’entrée La technique d’apprentissage utilisée s’appelle la règle d’étude de perceptron Le Perceptron est particulièrement approprié aux problèmes simples de classification Il peut résoudre des problèmes rapidement et de manière fiable En outre, la compréhension des opérations du perceptron fournit une bonne base pour comprendre des réseaux plus complexes.
Modèle de neurone
Un neurone de perceptron emploie la fonction de transfert hardlim
R= nombre d’éléments dans le vecteur d’entrée
Figure 3-8 : Un neurone de perceptron
Chaque entrée a un poids approprié w1j, et la somme des entrées poids est envoyée à la fonction de transfert de dur-limite, qui a le biais d’entré 1 La fonction de transfert de dur- limite, qui renvoie 0 ou 1, est montrée ci-dessous
Le fonction de transfert de dur-limite
Figure 3-9 : La fonction de transfert de dur-limite
Le neurone de perceptron produit 1 si net d’entrée dans la fonction de transfert est égale ou supérieure à 0, autrement il produit 0
La fonction de transfert de dur-limite donne à un perceptron la capacité de classifier des vecteurs d’entrée en divisant l’espace d’entrée en deux régions Spécifiquement, les sorties seront 0 si l’entrée net n est moins de 0, ou 1 si l’entrée net n est 0 ou plus
L’espace d’entrée d’un neurone dur-limite de deux entrées avec les poids
1 =− w w et le biais b=1 est montré ci-dessous :
Deux régions de classification sont constituées par la ligne de frontière de décision L à Wp + b = 0 Cette ligne est perpendiculaire à la matrice de poids W et décalée selon le biais b Le vecteur d’entrée au-dessus et à la gauche de la linge L aura un net d’entrée plus grand que 0, et produira le neurone de dur-limite 1 Les vecteurs d’entrées ci-dessous et à la droite de ligne L produisent le neurone 0 On peut sélectionner le poids et les valeurs polarisées pour orienter et déplacer la ligne de division afin de classifier l’espace d’entrée comme désiré
Les neurones de dur-limite sans biais ont toujours une ligne de calssification qui passe par l’origne Ajouter un biais permet au neurone de résoudre des problèmes ó les deux ensembles de vecteurs d’entrées ne sont pas situés de part et d’autre de l’origine Le biais permet à la frontière de décision d’être décalée loin de l’origine.
Architecture de perceptron
Le réseau de type perceptron se compose d’une seule couche de S neurones de perceptron reliés aux R entrées par un ensemble de poids wi,j Les index i et j du réseau indiquent que wi,j est la connexion du j ième entrée au i ième neurone
Règles d’apprentissage
Une règle d’apprentissage est définie comme procédure pour modifier les poids et les biais d’un réseau (cette procédure est utilisée comme un algorithme d’apprentissage) La rốgle d’apprentissage est appliquộe pour entraợner le rộseau afin d’exộcuter une certaine tâche particulière Il y a deux types d’apprentissage : l’apprentissage supervisé et l’apprentissage non-supervisé
Dans l’apprentissage supervisé, la règle d’apprentissage est équipée d’ensemble d’exemples de comportements propres de réseaux
{ p 1 , t 1 } { , p 2 , t 2 } , , { p Q , t Q } ó p Q est une entrée au réseau, et t Q est la sortie correspondante correcte (cible) Quand les entrées sont appliquées au réseau, les sorties du réseau sont comparées aux cibles La règle d’apprentissage est employée pour ajuster les poids et les biais du réseau afin de déplacer les sorties de réseau plus près des cibles La règle d’apprentissage du perceptron est dans la catégorie de l’apprentissage supervisé
Dans l’apprentissage non-supervisé, les poids et les biais sont modifiés en réponse aux entrées de réseau seulement Il n’y a aucune cible disponible La plupart de ces algorithmes réalisent des opérations de regroupement de données Elles catégorisent les entrées dans un nombre fini de classes C’est particulièrement utile dans des applications telles que la classification des textes, caractérisation des clients, recherche de profils etc
3.3.5 3.3.5 3.3.5 3.3.5 Règle d’apprentissage de Règle d’apprentissage de perceptron Règle d’apprentissage de Règle d’apprentissage de perceptron perceptron perceptron
Les perceptrons sont formés sur des exemples du comportement désiré Le comportement désiré peut être récapitulé par un ensemble de paires entrée/sorties
Dans cette formule, p est une entrée au réseau et t le produit correspondant (cible)
L’objectif est de réduire l’erreur e, qui est la différence entre la réponse de neurone a et le vecteur de cible t
Il y a trois conditions qui peuvent se produire pour un neurone simple une fois qu’un vecteur d’entrée p est présenté et la réponse du réseau a est calculée :
• Cas 1 Si un vecteur d’entrée est présenté et le rendement du neurone est correct (a t et e = t – a = 0), alors le vecteur de poids w n’est pas changé
• Cas 2 Si le rendement de reurone est 0 et la cible est 1 (a = 0,t = 1, et e = t – a = 1), le vecteur d’entrộe est ajoutộ au vecteur de poids w Ceci entraợne que le vecteur de poids est plus près du vecteur d’entrée, augmentant la chance que le vecteur d’entrée soit classifié comme 1 à l’avenir
• Cas 3 Si le rendement de neurone est 1 et le cible est 0 (a = 1,t = 0, et e = t – a = -
1), le vecteur d’entrée p est soustrait du vecteur de poids w Ceci implique que le vecteur de poids est plus lointain à partir du vecteur d’entrée, augmentant la chance que le vecteur d’entrée soit classifié comme 0 à l’avenir
La règle d’apprentissage de perceptron peut être écrite plus succinctement en terme d’erreur e = t – a et le changement à faire au vecteur de poids ∆w:
Cas 1 Si e = 0, faire un changement ∆w égal à 0
Cas 2 Si e = 1, faire un changement ∆w égal à pppp T Cas 3 Si e = -1, faire un changement ∆w égal à - p p p p T Chacun des trois cas peut alors être écrit avec une expression simple :
Parce que les biais ont la valeur 1, on peut donc écrire e a t−
Règle d’apprentissage de perceptron
La règle d’apprentissage de perceptron peut être récapitulée comme suit :
Algorithme d’apprentissage de ô Backpropagation ằ
Introduction
L’algorithme d’apprentissage de Backpropagation a été créé en généralisant la loi d’apprentissage de Widrow-Hoff à des réseaux de neurones multicouches constitués de fonctions de transfert différentiables Les vecteurs d’entrées et les vecteurs cibles correspondant sont utilisés pour apprendre le réseau
Les rộseaux de neurones constituộs de biais et de fonctions de transfert ô sigmọdale ằ et une couche de sortie constituée de fonctions de transfert linéaires sont capables d’approximer n’importe qu’elle fonction possédant un nombre fini de discontinuité
La règle delta impose toujours
∆ α La difficulté réside toujours dans le calcul de W
Le backpropagation standard est un algorithme de descente du gradient, comme la loi d’apprentissage de Widrow-Hoff, dans lequel les poids du réseaux sont ajustés dans le sens du gradient négatif de la fonction cỏt Le terme de rétro propagation veut dire que le gradient est calculé pour des réseaux multicouches non linéaires De nombreuses techniques existent, plus ou moins rapides, performantes et gourmandes en mộmoire vive Il apparaợt que la technique de Levenberg-Marquardt est un algorithme très rapide.
Architecture de neurone
L’architecture de réseau qui est le plus utilisé généralement avec l’algorithme de backpropagation est le réseau multicouche de feedforward
3.4.2.1 3.4.2.1 3.4.2.1 3.4.2.1 Modèle de neurone (logisg, tansig, purelin)Modèle de neurone (logisg, tansig, purelin)Modèle de neurone (logisg, tansig, purelin)Modèle de neurone (logisg, tansig, purelin)
Un neurone élémentaire avec R entrées est montré ci-dessous Chaque entrée a un poids approprié w La somme des entrées de poids et des biais forme l’entrée à fonction de transfert f Les neurones peuvent utiliser n’importe quelle fonction de transfert différente pour produire leur sorties
R = nombre d’éléments dans le vecteur d’entrée
Figure 3-12 : Modèle de neurone Backpropagation
Le réseau multicouche peut utilser les fonctions de transfert logsig, tansig ou purelin Si la dernière couche d’un réseau multicouche a les neurones sigmọdes, alors les sorties du réseau sont limitées à une petite période Si la sortie de réseau est linaire, on peut prendre n’importe quelle valeur
Fonction de transfer Log- Sigmọd
Fonction de transfer Tag- Sigmọd
Figure 3-13 : Les fonctions de transfert
3.4.2.2 3.4.2.2 3.4.2.2 3.4.2.2 Réseau feedRéseau feedRéseau feedRéseau feed -forward-forwardforward forward
Un réseau seule couche avec S neurones de logsig, R entrées est montré ci-dessous :
R=nombre d’éléments dans le vecteur d’entrée S= nombre de neurones dans la couche
Figure 3-14 : Réseau feed-forward avec une couche
Les réseaux de Feedforward ont souvent une ou plusieurs couches cachées de neurones sigmọdes suivis d’une couche de sortie de neurones linéaires Les neurones multicouches avec des fonctions de transferts non-linéaires permettent au réseau d’utiliser des relations non-linéaires et linéaires entre le vecteur d’entrée et le vecteur de sorite La couche de sortie linéaire laisse le réseau produir des valeurs en-dehors de la période (-1,1)
De plus, si on veut contraindre les sorties d’un réseau (comme entre 0 et 1), alors la couche de sortie devrait employer une fonction de transfert (comme le logsig)
Un réseau avec deux couches tansig/purelin est présenté ci-dessous :
Figure 3-15 : Réseau feed-forward avec deux couches tansig/purelin
Ce réseau peut être employé comme une fonction approximative en général Il peut bien apporcher n’impore quelle fonction avec un nombre arbitraire fini de discontinuités quand on donne suffisament de neurones dans la couche cachée.
Algorithme de Backpropagation
Il y a beaucoup de variations de l’algorithme de backpropagation, dont plusieurs sont utilisés dans ce rapport Le négatif du gradient est le plus simple à implémenter dans backpropagation pour ajuster des poids et des biais dans la direction telle que la fonction d’exécution diminue le plus rapidement Une itération de cet algorithme peut être écrite k k k k x g x +1 = −α
Où x k est un vecteur des poids et des biais courants, g k est le gradient courant et α k est le taux d’apprentissage (learning rate).
Filtres adaptatifs et formation adaptative
Introduction
Les réseaux d’ADALINE (adaptive linear neuron networks) sont semblables au perceptron, mais leur fonction de transfert est linéaire plutôt que de dur-limiter Ceci permet à leurs sorties de prendre n’importe quelle valeur, tandis que le rendement de perceptron est limité à
0 ou à 1 L’ADALINE et le percpetron peuvent résoudre linéairement des problèmes
Cependant, la règle de learning de LMS(least mean squares) est beaucoup plus puissante que la règle de perceptron.
Modèle de neurone linéaire
Un neurone linéaire avec R entrés :
R = nombre d’éléments dans le vecteur d’entrée
Figure 3-16 : Modèle de neurone linéaire
Ce réseau a la même structure que le perceptron La seule différence est que le neurone linéaire utilise la fonction de transfert linéaire appelée purelin
Figure 3-17 : La fonction de transfert linéaire
La fonction de transfert linéaire calcule la sortie du neurone par simplement la valeur passée à elle.
Architecture de réseau linéaire adaptatif
Le réseau d’ADALINE montré ci-dessous a une couche de S neurones reliés aux R entrés par une matrice avec des poids W
R = nombre d’éléments dans le vecteur d’entrée
S = nombre de neurones dans la couche
Figure 3-18 : L’architecture de réseau linéaire adaptatif
3.5.4 3.5.4 3.5.4 3.5.4 L’algorith L’algorithm L’algorith L’algorith m m me e e LMS (Least e LMS (Least LMS (Least Mean LMS (Least Mean Mean Squared Mean Squared Squared) Squared ) ) )
Comme la règle d’apprentissage de perceptron, LMS est un exemple d’apprentissage supervisé, dans lequel la règle d’apprentissage est équipée d’ensemble d’exemples du comportement désiré de réseau
Ici le PPPPQ Q Q Q est une entrée au réseau, et le ttttQ Q Q Q est la sortie de cible correspondante Avec chaque entrée au réseau, la sortie est comparée à la cible L’erreur est calculée comme différence entre le rendement de cible et le rendement de réseau Le but est de réduire au minimum la moyenne de la somme de ces erreurs
L’algorithme de LMS ajuste les poids et les biais de l’ADALINE afin de réduire au minimum cette erreur moyenne carrée
3.5.5 3.5.5 3.5.5 3.5.5 Filtrage adaptatif (adapt) Filtrage adaptatif (adapt) Filtrage adaptatif (adapt) Filtrage adaptatif (adapt)
Le réseau d’ADALINE, comme le perceptron, peut seulement résoudre des problèmes séparables linéairement Néanmoins, l’ADALINE a été et est aujourd’hui l’un des réseaux de neurones les plus employés Le filtrage adaptatif est l’un de ses domaines d’application principaux
3.5.5.1 3.5.5.1 3.5.5.1 3.5.5.1 Tapped Delay lineTapped Delay lineTapped Delay lineTapped Delay line
Un nouveau composant, Tapped Delay line, est nécessaire pour utiliser pleinement le réseau d’ADALINE Le Delay line est montré ci-dessous Le signal d’entrée entre par la gauche, et passe par les N-1 délais Le rendement du Tapped Delay line(TDL) est un vecteur de N dimensions, créé par les signaux d’entrée au temps courant, d’entrée au temps précédent, etc
Figure 3-19: Le tapped delay line
3.5.5.2 3.5.5.2 3.5.5.2 3.5.5.2 Filtrage adaptatifFiltrage adaptatifFiltrage adaptatifFiltrage adaptatif
On peut combiner le Tapped Delay line avec un réseau d’ADALINE pour créer le filtre adaptatif présenté ci-dessous
Figure 3-20 : Le modèle du filtrage adaptatif
La sortie du filtre est donnée par
Filtrage adaptatif (adapt)
Le réseau d’ADALINE, comme le perceptron, peut seulement résoudre des problèmes séparables linéairement Néanmoins, l’ADALINE a été et est aujourd’hui l’un des réseaux de neurones les plus employés Le filtrage adaptatif est l’un de ses domaines d’application principaux
3.5.5.1 3.5.5.1 3.5.5.1 3.5.5.1 Tapped Delay lineTapped Delay lineTapped Delay lineTapped Delay line
Un nouveau composant, Tapped Delay line, est nécessaire pour utiliser pleinement le réseau d’ADALINE Le Delay line est montré ci-dessous Le signal d’entrée entre par la gauche, et passe par les N-1 délais Le rendement du Tapped Delay line(TDL) est un vecteur de N dimensions, créé par les signaux d’entrée au temps courant, d’entrée au temps précédent, etc
Figure 3-19: Le tapped delay line
3.5.5.2 3.5.5.2 3.5.5.2 3.5.5.2 Filtrage adaptatifFiltrage adaptatifFiltrage adaptatifFiltrage adaptatif
On peut combiner le Tapped Delay line avec un réseau d’ADALINE pour créer le filtre adaptatif présenté ci-dessous
Figure 3-20 : Le modèle du filtrage adaptatif
La sortie du filtre est donnée par
Réseau dynamique
Focused Time-Delay Neural Network (newfftd)
Des réseaux de neurones peuvent être classifiés dans des catégories en dynamiques et statiques Les réseaux statiques (feedforward) n’ont aucun élément de rétroaction, ni de retard (delay) La sortie est calculée directement à partir de l’entrée par la propagation en avant – le feedforward Dans les réseaux dynamiques, la sortie dépend non seulement de l’entrée courante au réseau, mais également des entrées, des sorties ou des états courants ou précédents du réseau
Des réseaux dynamiques peuvent également être divisés en deux catégories : ceux qui ont seulement des raccordements en avant, et ceux qui contiennent aussi la rétroaction
3.6.2 3.6.2 3.6.2 3.6.2 Focused T Focused Time Focused T Focused T ime ime ime- - - -Delay Neural Network (newfftd) Delay Neural Network (newfftd) Delay Neural Network (newfftd) Delay Neural Network (newfftd)
Nous commenỗons par le rộseau dynamique le plus franc, qui se compose d’un rộseau de feedforward avec ô tapped delay line ằ à l’entrộe Il s’appelle le Focused Time-Delay Neural Network (FTDNN) C’est une partie d’une classe générale des réseaux dynamiques, appelée des rộseaux focalisộs, dans lesquels la dynamique apparaợt seulement à la couche d’entrộe d’un réseau multicouche statique de feedforward La figure suivante illustre une deux-couche FTDNN Ce réseau est bien adapté à la prévision de série de temps
Figure 3-21 : Le réseau neurone focused Time-Delay
Conclusion
On a discuté des systèmes d’apprentissage basés sur les réseaux de neurones Ils sont employés dans plusieurs domaines, comme la reconnaissance des formes, les systèmes de commande, etc Dans le projet MODEAU, on a besoin d’utiliser les réseaux de neurones pour faire la prédiction d’arrivées d’eau dans le système de production de gaz en aquifère Il est important de prédire l’arrivée de bouchons d’eau dans les puits
On va utiliser trois modèles de réseaux de neurones pour faire la prédiction, ce sont les réseaux Backpropagation, adaptatif, et dynamique On va voir la différence entre les modèles et les résultats de chaque modèle utilisé.
Pré-traitment de données
Avant de commencer la modélisation et l’apprentissage, il a été nécessaire d’effectuer une préparation des données
Comme je l’ai déjà mentionné, les données ont été enregistrées sur le stockage de Cerville au cours des campagnes de soutirage 2006 et 2007 Elles sont stockées dans les fichiers de type texte (txt) Pour chaque puits observé, l’évolution de quatre paramètres a été suivie : – Le niveau d’eau dans le séparateur
– Le débit du gaz, – La pression, – La température
Figure 4-1 : Le graphe de données de gaz, d’eau, de pression, de température
Pour un apprentissage correct il est nécessaire que les données comportent suffisamment de signatures de l’événement considéré Normalement un bouchon d’eau se déroule pendant environ une minute, donc pour observer tout le processus d’un bouchon, je prends des données toutes les 7 secondes, c’est à dire que la fréquence de l’enregistrement est de 7 secondes Les données sont observées sur six mois du 01/11/2005 au 15/04/2006 La taille des fichiers de données est très importante (1500000 points, 100 Mo) Nous avons alors été confrontés à un gros problème de mémoire et de temps de calcul
Figure 4-2 : Graphe de données d’eau Le bouchon
Figure 4-3 : : Graphe de données d’eau Le bouchon - zoom
Au cours du pré-traitement des données, deux problèmes majeurs sont apparus à savoir les données manquantes et les données erronées Pour pouvoir utiliser ces données lors de l’apprentissage, il est nécessaire de détecter et corriger des données erronées, compléter les données manquantes, là ó c’est possible
Figure 4-4 : Des données manquantes et des données erronées
Dans les fichiers txt, il y a de nombreuses indications inutiles, il faut donc seulement lire les données dont j’ai besoin pour faire l’apprentissage, c’est-à-dire l’eau, le gaz, la température et la pression Pour pouvoir importer les données dans MATLAB, il est nécessaire d’avoir des fichiers bien structurés avec des séparateurs de colonne comme le point-virgule ô ; ằ
Il n’est pas possible d’insérer les séparateurs dans les fichiers txt avec les éditeurs de texte ô classiques ằ, parce que la quantitộ des donnộes est trop importante – il y a environ
1500000 enregistrements dans chaque fichier Il m’a donc fallu utiliser un éditeur spécial – Editplus – pour insérer des séparateurs
Une fois les données importées, je les ai stockées dans le format interne de Matlab (fichiers mat) Donc, il a été facile de détecter les données manquantes dans ce type de structure D’une part, on peut visualiser les données à l’aide des graphiques, sur lesquels les données manquantes sont visibles, d’autre part on peut écrire un petit script pour chercher le numéro de l’enregistrement erroné ou de la donnée manquante
Afin de compléter les données manquantes ou les données erronées, j’ai utilisé la moyenne des données voisines Cependant, cette méthode n’est pas applicable dans le cas de plusieurs données manquantes à la suite ou dans le cas des données compliquées avec beaucoup de variations Dans ce cas, j’ai décidé soit d’effacer les données sur l’ensemble de la période concernée soit de copier les données d’une autre période avec les mêmes conditions d’exploitation.
Prédiction des événements
Filtre adaptatif
Si on veut utiliser un filtre adaptatif pour prévoir la prochaine valeur d’un processus aléatoire, p(t), on peut employer le réseau montré ci-dessous :
Figure 4-28 : La modèle de la prédiction d’événement du filtre adaptatif
Le signal pour être prévu, p(t), entre de la gauche dans le tapped delay line Les deux valeurs précédentes de p(t) sont disponibles comme les sorties du tapped delay line Le réseau utilise adapt pour changer les poids chaque étape afin de réduire au minimum l’erreur e(t) Si cette erreur est zéro, alors le réseau a produit a(t) est exactement égal à p(t), et le réseau a fait sa prévision correctement
Nous allons faire une prédiction de l’eau avec un tapped delay line = 9, et avec une réduction de données 1/10
Ordre Evénement Tapped delay line Erreur
Tableau 4-14 : Résultats de prédiction de 1 à 10 événements après par le filtre adaptatif avec TDL=9
On voit que l’erreur quand on prédit 10 événements après est de 0.4501 ; c’est beaucoup moins que le résultat avec Backpropagation (0.9406) On peut voir le détail sur les graphes ci- dessous :
Figure 4-29 : Prédiction 10 événements après par le filtre adaptatif avec les données réduites 1/10
Figure 4-30 : Prédiction 10 événements après par le filtre adaptatif avec les données réduites 1/10 – zoom1
Figure 4-31 : Prédiction 10 événements après par le filtre adaptatif avec les données réduites 1/10 – zoom2
On trouve que cette méthode peut prédire les petits bouchons mais elle est moins pertinente avec les gros bouchons (elle prédit leur moment d’occurrence mais pas leur intensité)
Le résultat du filtre adaptatif dépend beaucoup de la longueur du tapped delay line On teste différents tapped delay line:
Ordre Evénement Tapped delay line Erreur
Tableau 4-15 : Résultats de prédiction 10 événements après par le filtre adaptatif avec les TDLs différents
La limite pour la longueur du tapped delay line est de 65 Si la valeur excède 65, on ne peut pas faire la prédiction
Figure 4-32 : Prédiction 10 événements après par le filtre adaptatif TDL = 65
Figure 4-33 : Prédiction 10 événements après par le filtre adaptatif TDL = 65 - zoom
On prédit bien le bouchon avec une erreur e= 0.2949, mais dans ce cas, il y a aussi apparition de quelques prédictions fausses Ceci est de moindre importance car cela permet d’adopter un comportement conservatif
Avec l’erreur e = 0.2949 pour prédire 10 événements après, on peut prédire plus d’événements utilisant le filtre adaptatif :
Ordre Evénement Tapped delay line Erreur
Tableau 4-16 : Prédiction de 20 à 50 événements après par le filtre adaptatif TDL = 65
50 événements équivant à une heurs, avec l’erreur = 0.3477, cette erreur est acceptable pour prédire un événement dans une heures
Figure 4-34 : Prédiction de 50 événements après par le filtre adaptatif TDL = 65
Figure 4-35: Prédiction de 50 événements après par le filtre adaptatif TDL = 65 – zoom 1
Figure 4-36 : Prédiction de 50 événements après par le filtre adaptatif TDL = 65 – zoom 2
Prédire l’eau avec gaz imposé Prédire l’eau avec gaz imposé Prédire l’eau avec gaz imposé Prédire l’eau avec gaz imposé
Dans le système d’exploitation du gaz, on peux ajuster le débit du gaz pour contrôler le niveau d’eau Donc, on va utiliser le filtre adaptatif pour prédire le niveau d’eau avec le débit du gaz imposé Ici, j’ai utilisé, le modèle de filtra adaptatif pour prédire les événements dans une heure, deux heures et trois heures après
Ordre Evénement Tapped delay line Erreur
Tableau 4-17 : Prédiction de 50 à 150 événements après par le filtre adaptatif avec gaz imposé
Figure 4-37 : Prédiction de 150 événements après par le filtre adaptatif avec gaz imposé – zoom1
Figure 4-38 : Prédiction de 150 événements après par le filtre adaptatif avec gaz imposé – zoom2
J’ai mis en place deux modèles d’apprentissage: Backpropagation et Filtre adaptataif pour prévoir l’arrivée des bouchons d’eau Par les résultats obtenus on voit que le modèle de filtre adaptatif est le mieux adapté
Avec Backpropagation, les résultats sont bons pour la prédiction des événements proches
Les résultats ne sont pas bons quand on prédit plusieurs événements après
Avec le Filtre adaptatif, on peut prévoir de un à plusieurs événements dans la future Avec cette méthode, la valeur d’erreur n’a pas relevé très vite quand on augemente les événements de prédiction
Il existe d’autres modèles d’apprentissages, mais je n’ai pas assez de temps pour les tester parce que mon stage se déroule pendant seulement six mois Pour l’instant, les résultats obtenus avec le modèle Filtre adaptatif pour prévoir l’arrivée des bouchons d’eau est un outil qui fournit des résultats satifaisants
[1] Howard Demuth, Mark Beale, Martin Hagan – Neural Network Toolbox – 2007
[2] Magali Claudel – Projet MOEAU : Avancement à novembre 2006 Perspectives pour 2007
[3] Magali Claudel – Projet MOEAU : Sous – parite Données Réelles Sites (D.R.S) : Bilan des essais réalisés sur le puits VA27 à Cerville durant la cmpagne 2005/2006
[4] Christopher M Bishop – Neural Networks for Pattern Recognition – 2004
[5] Society of Retroleum Engineers SPE 87008 – From Real Time Data to Production Optimization – 2004
[6] Mark Last, Abraham Kandel, Horst Bunke - Data mining in time series databases - 2004
[7] Esa Alhoniemi - Pattern recognition – spring 2003
Scripts d’apprentissages avec Backpropagation
- données y4 : données gaz, eau, pression, température
%Description: prédire les différentes événements après avec Backpropagation
%chaque fois prédire les événement après, on essayer de prédire avec
% différences neurones, chaque cas on enregistre le
%résultat et les informations dans un struct cycle.
%cycle(i,j): c'est le cas avec prédire i événement après, avec j neurones
%y4: données gaz, eau, pression, température f;%nombre d'événements après s=4;%nombre de neurones n988; n1P000; n2=n1+1; n3=n-n1-1; for i:f t4.'; p=y4; for l=1:i t(l)=[]; p(:,n+1-l)=[]; end %preprocessing données [tn,ts]=mapminmax(t);
[pn, ps]=mapminmax(p); tn1=tn(:,1:n1); tn2=tn(:,n2:n-l); t1=t(:,1:n1); t2=t(:,n2:n-l); pn1=pn(:,1:n1);%données d'apprentissages pn2=pn(:,n2:n-l);%données de teste for j=4:1:s cycle(i,j)=struct('net', newff([-1 1;-1 1;-1 1;-1 1], [j, 1], {'purelin','tansig'},'trainlm'),'tr',[],'an1',[],'a1',[],'t1',t1,'x1' ,[],'an2',[],'a2',[],'t2',t2,'x2',[]); cycle(i,j).net.trainParam.showP; cycle(i,j).net.trainParam.epochsP0; cycle(i,j).net.trainParam.lr=0.05; cycle(i,j).net.trainParam.goal-7;
[cycle(i,j).net,cycle(i,j).tr]=train(cycle(i,j).net, pn1,tn1);
%simulation avec données d'apprentissage cycle(i,j).an1=sim(cycle(i,j).net,pn1);
%an1=sim(cycle(i,j).net,pn1); cycle(i,j).a1=mapminmax('reverse',cycle(i,j).an1,ts); cycle(i,j).x1=(1:1:length(cycle(i,j).a1));
%cycle(i,j).graph=plot(cycle(i,j).x1, cycle(i,j).a1, cycle(i,j).x1, t1);
%simulation avec données de teste cycle(i,j).an2=sim(cycle(i,j).net,pn2); cycle(i,j).a2=mapminmax('reverse',cycle(i,j).an2, ts); cycle(i,j).x2=(1:1:length(cycle(i,j).a2));
%cycle(i,j).graph=plot(cycle(i,j).x2, cycle(i,j).a2, cycle(i,j).x2, t2); end end
Script d’apprentissage avec Filtre Adaptatif
- données y4 : données gaz, eau, pression, température
%ce script prédire avec les différences événements après et enregistre dans
%un struct str, i: nombres d'événement après n988; n1P000;%données d'apprentissage n2P001; % données test t= con2seq(eau4.');
[tn,ts]=mapminmax(t); p=con2seq(y4);
[pn,ps]=mapminmax(p); tn1=tn(1:n1); tn2=tn(n2:end); pn1=pn(1:n1); pn2=pn(n2:end);
%dl; lr = 0.01; for i:10:10 delays =(i:i+15);%longue de tapped delay line str=struct('net', newlin([-1 1;-1 1;-1 1],1,delays,lr),'a1',[],'t1',[],'x1',[],'a2',[],'t2',[],'x2',[],'e1',[],'e2 ',[]); pp = pn1(i+16:end); tt = tn1(i+16:end); for k=1:i+15, Pi{1,k}=pn1{k}; end str.net.adaptParam.passes = 100;
[str.net,str.a1,e]apt(str.net,pp,tt,Pi); str.a1=mapminmax('reverse',str.a1,ts); str.t1=mapminmax('reverse',tt,ts); str.x1=(1:1:length(str.t1));
%tn2=tn2(i+1:end); str.a2=sim(str.net, pn2,Pi); str.a2=mapminmax('reverse', str.a2, ts); str.t2=mapminmax('reverse', tn2, ts); str.x2=(1:1:length(str.t2)); str.e1l2mat(str.a1)-cell2mat(str.t1); str.e1=mse(str.e1); str.e2l2mat(str.a2)-cell2mat(str.t2); str.e2=mse(str.e2); filename=strcat('new2\Adapt\str','_',int2str(i)); save(filename,'str'); clear str;
%plot(str.x1,cat(2,str.a1{:}),str.x1,cat(2,str.t1{:}));
%plot(str.x2,cat(2,str.a2{:}),str.x2,cat(2,str.t2{:})); end
Script de prévoir niveau d’eau avec gaz proposé
testAdapt_gazConnais.m testAdapt_gazConnais.m testAdapt_gazConnais.m testAdapt_gazConnais.m
- données y4 : données gaz, eau, pression, température(mais on utilise seulement gaz et eau)
%Description: Prédire avec Filtre adaptatif avec gaz connais
PP=y4(1:2,:);%utilise gaz et eau PP(3,:)=PP(2,:); p=con2seq(PP);
[pn,ps]=mapminmax(p); tn1=tn(1:n1); tn2=tn(n2:end); pn1=pn(1:n1); pn2=pn(n2:end);
%dl; lr = 0.01; for iP:50:150 for l=1:n1 PP(3,l)=PP(3,l+i);%propos gaz connais dans i événement après end delays =(i:i+60); str=struct('net', newlin([-1 1;-1 1;-1 1],1,delays,lr),'a1',[],'t1',[],'x1',[],'a2',[],'t2',[],'x2',[],'e1',[],'e2 ',[]); pp = pn1(i+61:end); tt = tn1(i+61:end); for k=1:i+60, Pi{1,k}=pn1{k}; end str.net.adaptParam.passes = 100;
[str.net,str.a1,e]apt(str.net,pp,tt,Pi); str.a1=mapminmax('reverse',str.a1,ts); str.t1=mapminmax('reverse',tt,ts); str.x1=(1:1:length(str.t1));
%tn2=tn2(i+1:end); str.a2=sim(str.net, pn2,Pi); str.a2=mapminmax('reverse', str.a2, ts); str.t2=mapminmax('reverse', tn2, ts); str.x2=(1:1:length(str.t2)); str.e1l2mat(str.a1)-cell2mat(str.t1); str.e1=mse(str.e1); str.e2l2mat(str.a2)-cell2mat(str.t2); str.e2=mse(str.e2);