Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Modélisation de réseaux de neurones peu profonds et prédiction de séries temporelles

Les réseaux de neurones dynamiques réalisent de bonnes prédictions de séries temporelles. Vous trouverez des exemples d’utilisation de réseaux NARX appliqués à la prédiction en boucle ouverte, en boucle fermée et en boucle ouverte/fermée en plusieurs étapes dans Multistep Neural Network Prediction.

Conseil

Pour le Deep Learning avec des données de séries temporelles, veuillez consulter Classification de séquences avec le Deep Learning.

Supposez par exemple que vous disposiez de données d’un processus de neutralisation du pH. Vous voulez concevoir un réseau permettant de prédire le pH d’une solution dans un réservoir à partir des valeurs passées du pH et des valeurs passées du débit des solutions acides et basiques dans le réservoir. Vous avez ces séries pour un total de 2001 pas de temps.

Il existe deux manières de résoudre ce problème :

Remarque

Utilisez l’application Deep Network Designer pour créer, visualiser et entraîner des réseaux de neurones de Deep Learning de manière interactive. Pour plus d’informations, veuillez consulter Introduction au Deep Network Designer.

Il est généralement préférable de commencer avec l’application puis d’utiliser l’application pour générer automatiquement des scripts de lignes de commande. Avant d’utiliser l’une des méthodes, commencez par définir le problème en sélectionnant un jeu de données. Chacune des applications sur les réseaux de neurones a accès à plusieurs jeux de données que vous pouvez utiliser pour vous entraîner avec la toolbox (voir Exemples de jeux de données pour les réseaux de neurones peu profonds). Si vous voulez résoudre un problème spécifique, vous pouvez charger vos propres données dans l’espace de travail.

Réseaux de séries temporelles

Vous pouvez entraîner un réseau de neurones pour résoudre trois types de problèmes de séries temporelles.

Réseau NARX

Dans le premier type de problème de séries temporelles, vous voulez prédire les valeurs futures d’une série temporelle y(t) à partir des valeurs passées de cette série temporelle et des valeurs passées d’une deuxième série temporelle x(t). Cette forme de prédiction est dite autorégressive non linéaire avec entrée exogène (externe), ou NARX (voir Design Time Series NARX Feedback Neural Networks), et peut être écrite de la manière suivante :

y(t) = f(y(t – 1), ..., y(td), x(t – 1), ..., (td))

Utilisez ce modèle pour prédire les valeurs futures d’une action ou d'une obligation, en fonction de variables économiques telles que les taux de chômage, le PIB, etc. Vous pouvez également utiliser ce modèle pour l’identification de système, dans lequel des modèles sont développés afin de représenter des systèmes dynamiques, tels que des processus chimiques, des systèmes de fabrication, la robotique, les véhicules aérospatiaux, etc.

Réseau NAR

Dans le deuxième type de problème de série temporelle, une seule série est concernée. Les valeurs futures d’une série temporelle y(t) ne sont prédites qu’à partir des valeurs passées de cette série. Cette forme de prédiction est dite autorégressive non linéaire, ou NAR, et peut être écrite de la manière suivante :

y(t) = f(y(t – 1), ..., y(td))

Vous pouvez utiliser ce modèle pour prédire des instruments financiers, mais sans utiliser de série complémentaire.

Réseau d’entrée-sortie non linéaire

Le troisième type de problème de séries temporelles est similaire au premier type, car il comporte deux séries : une série d’entrée x(t) et une série de sortie y(t). Vous voulez ici prédire les valeurs de y(t) à partir des valeurs précédentes de x(t), mais sans connaître les valeurs précédentes de y(t). Ce modèle d'entrée/sortie peut être écrit de la manière suivante :

y(t) = f(x(t – 1), ..., x(td))

Le modèle NARX produit de meilleures prédictions que ce modèle d’entrée-sortie car il utilise les informations supplémentaires contenues dans les valeurs précédentes de y(t). Toutefois, il existe certaines applications pour lesquelles les valeurs précédentes de y(t) ne seront pas disponibles. Ce sont les seuls cas pour lesquels il est préférable d’utiliser le modèle d’entrée-sortie plutôt que le modèle NARX.

Définir un problème

Pour définir un problème de séries temporelles pour la toolbox, organisez un ensemble de vecteurs prédicteurs de séries temporelles sous forme de colonnes dans un cell array. Organisez ensuite un ensemble de vecteurs de réponse de séries temporelles (les bons vecteurs de réponse pour chacun des vecteurs prédicteurs) dans un deuxième cell array. Dans certains cas, vous n’avez besoin que d’un jeu de données de réponse. Vous pouvez par exemple définir le problème de séries temporelles suivant, dans lequel vous voulez utiliser les valeurs précédentes d’une série afin de prédire la valeur suivante :

responses = {1 2 3 4 5};

La section suivante indique comment entraîner un réseau pour l'adapter à un jeu de données de séries temporelles avec l’application Neural Net Time Series. Cet exemple utilise des données fournies avec la toolbox.

Ajuster des données de séries temporelles avec l’application Neural Net Time Series

Cet exemple indique comment entraîner un réseau de neurones peu profond pour ajuster des données de séries temporelles avec l’application Neural Net Time Series.

Ouvrez l’application Neural Net Time Series avec ntstool.

ntstool

Sélectionner un réseau

Vous pouvez utiliser l’application Neural Net Time Series pour résoudre trois types de problèmes de séries temporelles.

  • Dans le premier type de problème de séries temporelles, vous voulez prédire les valeurs futures d’une série temporelle y(t) à partir des valeurs passées de cette série temporelle et des valeurs passées d’une deuxième série temporelle x(t). Cette forme de prédiction est dite autorégressive non linéaire avec entrée exogène (externe), ou NARX.

  • Dans le deuxième type de problème de série temporelle, une seule série est concernée. Les valeurs futures d’une série temporelle y(t) ne sont prédites qu’à partir des valeurs passées de cette série. Cette forme de prédiction est dite autorégressive non linéaire, ou NAR.

  • Le troisième type de problème de séries temporelles est similaire au premier type, car il comporte deux séries : une série d’entrée (prédicteurs) x(t) et une série de sortie (réponses) y(t). Vous voulez ici prédire les valeurs de y(t) à partir des valeurs précédentes de x(t), mais sans connaître les valeurs précédentes de y(t).

Pour cet exemple, utilisez un réseau NARX. Cliquez sur Select Network > NARX Network.

Sélectionner les données

L’application Neural Net Time Series comporte des exemples de données pour vous aider à commencer à entraîner un réseau de neurones.

Pour importer un exemple de données de processus de neutralisation du pH, sélectionnez Import > More Example Data Sets > Import pH Neutralization Data Set. Vous pouvez utiliser ce jeu de données pour entraîner un réseau de neurones afin de prédire le pH d’une solution en fonction du débit des solutions acide et basique. Si vous importez vos propres données depuis un fichier ou l’espace de travail, vous devez spécifier les prédicteurs et les réponses.

Les informations sur les données importées apparaissent dans le Model Summary. Ce jeu de données contient 2001 pas de temps. Les prédicteurs ont deux caractéristiques (débit des solutions acide et basique) et les réponses ont une seule caractéristique (pH de la solution).

Répartissez les données entre les jeux d’apprentissage, de validation et de test. Conservez les paramètres par défaut. Les données sont réparties en :

  • 70 % pour l’apprentissage.

  • 15 % pour valider que le réseau généralise et arrêter l’apprentissage avant un surajustement (overfitting).

  • 15 % pour tester la généralisation du réseau de manière indépendante.

Pour plus d’informations sur la division des données, veuillez consulter Divide Data for Optimal Neural Network Training.

Créer un réseau

Le réseau NARX standard est un réseau feedforward à deux couches, avec une fonction de transfert sigmoïde dans la couche cachée et une fonction de transfert linéaire dans la couche de sortie. Ce réseau utilise également des lignes de retard (TDL, Tapped Delay Lines) pour enregistrer les valeurs précédentes des séquences x(t) et y(t). Notez que la sortie du réseau NARX, y(t), est renvoyée à l’entrée du réseau (à traversy(t) les retards), car est une fonction de y(t1),y(t2),...,y(td). Cette boucle de retour d'information peut toutefois être ouverte pour un apprentissage efficace.

Comme la sortie réelle est disponible pendant l’apprentissage du réseau, vous pouvez utiliser l’architecture en boucle ouverte illustrée ci-dessous, dans laquelle la sortie réelle est utilisée au lieu de renvoyer la sortie estimée. Cela présente deux avantages. Le premier est que l’entrée dans le réseau feedforward est plus précise. Le deuxième est que le réseau obtenu a une architecture purement feedforward, ce qui permet d’utiliser un algorithme plus efficace pour l’apprentissage. Ce réseau est abordé de manière plus détaillée dans Design Time Series NARX Feedback Neural Networks.

La valeur Layer size définit le nombre de neurones cachés. Conservez la valeur de Layer size par défaut, 10. Remplacez la valeur Time delay par 4. Vous devrez peut-être ajuster ces valeurs si les performances d’apprentissage du réseau ne sont pas bonnes.

Vous pouvez voir l’architecture du réseau dans le volet Network.

Entraîner le réseau

Pour entraîner le réseau, sélectionnez Train > Train with Levenberg-Marquardt. Il s'agit de l’algorithme d’apprentissage par défaut, qui équivaut à cliquer sur Train.

L’apprentissage avec Levenberg-Marquardt (trainlm) est recommandé pour la plupart des problèmes. Pour les problèmes avec un ensemble de données petit ou bruité, la régularisation bayésienne (trainbr) peut offrir une meilleure solution, bien que cela prenne plus de temps. Pour des problèmes de grande dimension, le gradient conjugué à l’échelle (SCG, Scaled Conjugate Gradient) (trainscg) est recommandé car il utilise des calculs de gradient qui consomment moins de mémoire que les calculs jacobiens utilisés par les deux autres algorithmes.

Vous pouvez voir la progression de l'apprentissage dans le volet Training. L'apprentissage se poursuit jusqu’à ce que l'un des critères d’arrêt soit rempli. Dans cet exemple, l’apprentissage continue jusqu’à ce que l’erreur de validation augmente consécutivement sur six itérations (« Critère de validation respecté »).

Analyser les résultats

Le Model Summary contient des informations sur l’algorithme d’apprentissage et sur les résultats de l’apprentissage pour chaque jeu de données.

Vous pouvez continuer à analyser les résultats en générant des tracés. Pour tracer l’autocorrélation des erreurs, dans la section Plots, cliquez sur Error Autocorrelation. Le tracé d’autocorrélation décrit comment les erreurs de prédiction sont reliées dans le temps. Pour un modèle de prédiction parfait, il ne devrait exister qu’une seule valeur non nulle de la fonction d’autocorrélation et elle devrait se produire au délai nul (l’erreur quadratique moyenne). Cela signifierait que les erreurs de prédiction n’étaient pas du tout corrélées entre elles (bruit blanc). S’il existait une forte corrélation entre les erreurs de prédiction, il devrait être possible d’améliorer la prédiction, peut-être en augmentant le nombre de retards dans les lignes de retard (TDL). Dans ce cas, les corrélations, excepté la corrélation au délai nul, se trouvent approximativement dans les limites de confiance de 95 % autour de zéro. Le modèle semble donc être approprié. Si vous aviez besoin de résultats encore plus précis, vous pourriez entraîner à nouveau le réseau. Cela modifierait les poids et biais initiaux du réseau et pourrait offrir un meilleur réseau après le nouvel apprentissage.

Regardez le tracé de corrélation croisée des erreurs d’entrée afin d’obtenir une vérification supplémentaire des performances du réseau. Dans la section Plots, cliquez sur Input-Error Correlation. Le tracé de corrélation croisée des erreurs d’entrée illustre la corrélation entre les erreurs et la séquence d’entrée x(t). Pour un modèle de prédiction parfait, toutes les corrélations devraient être nulles. S’il existe une corrélation entre l’entrée et l‘erreur, il devrait être possible d’améliorer la prédiction, peut-être en augmentant le nombre de retards dans les lignes de retard. Dans ce cas, la plupart des corrélations se trouvent dans l’intervalle de confiance autour de zéro.

Dans la section Plots, cliquez sur Response. Cela fait apparaître les sorties, les réponses (cibles) et les erreurs dans le temps. Cela indique également quels points temporels ont été sélectionnés pour l’apprentissage, les tests et la validation.

Si vous n’êtes pas satisfait des performances du réseau, vous disposez des possibilités suivantes :

  • Entraîner à nouveau le réseau.

  • Augmenter le nombre de neurones cachés.

  • Utiliser un jeu de données d’apprentissage plus grand.

De bonnes performances sur le jeu d’apprentissage associées à de mauvaises performances sur le jeu de test pourraient indiquer un surajustement (overfitting) du modèle. Une réduction de la taille de couche et donc du nombre de neurones permet de réduire le surajustement.

Vous pouvez également évaluer les performances du réseau sur un jeu de test supplémentaire. Pour charger des données de test supplémentaires pour l'évaluation du réseau, dans la section Test, cliquez sur Test. Le Model Summary affiche les résultats des données de test supplémentaires. Vous pouvez également générer des tracés afin d’analyser les résultats des données de test supplémentaires.

Générer du code

Sélectionnez Generate Code > Generate Simple Training Script afin de créer du code MATLAB pour reproduire les étapes précédentes en ligne de commande. Il peut être utile de créer le code MATLAB si vous voulez apprendre comment utiliser la fonctionnalité en ligne de commande de la toolbox pour personnaliser le processus d’apprentissage. Dans Ajuster les séries temporelles avec des fonctions en ligne de commande, vous étudierez les scripts générés de manière plus détaillée.

Exporter un réseau

Vous pouvez exporter votre réseau entraîné vers l’espace de travail ou Simulink®. Vous pouvez également déployer le réseau avec les outils MATLAB Compiler™ et d’autres outils de génération de code MATLAB. Pour exporter votre réseau entraîné et vos résultats, sélectionnez Export Model > Export to Workspace.

Ajuster les séries temporelles avec des fonctions en ligne de commande

La manière la plus facile d’apprendre à utiliser la fonctionnalité en ligne de commande de la toolbox consiste à générer des scripts à partir des applications, puis à les modifier afin de personnaliser l’apprentissage du réseau. À titre d’exemple, regardez le script simple qui a été généré dans la section précédente à l’aide de l'application Neural Net Time Series.

% Solve an Autoregression Problem with External Input with a NARX Neural Network
% Script generated by Neural Time Series app
% Created 13-May-2021 17:34:27
%
% This script assumes these variables are defined:
%
%   phInputs - input time series.
%   phTargets - feedback time series.

X = phInputs;
T = phTargets;

% Choose a Training Function
% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.
% 'trainscg' uses less memory. Suitable in low memory situations.
trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation.

% Create a Nonlinear Autoregressive Network with External Input
inputDelays = 1:4;
feedbackDelays = 1:4;
hiddenLayerSize = 10;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);

% Prepare the Data for Training and Simulation
% The function PREPARETS prepares timeseries data for a particular network,
% shifting time by the minimum amount to fill input states and layer
% states. Using PREPARETS allows you to keep your original time series data
% unchanged, while easily customizing it for networks with differing
% numbers of delays, with open loop or closed loop feedback modes.
[x,xi,ai,t] = preparets(net,X,{},T);

% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% Train the Network
[net,tr] = train(net,x,t,xi,ai);

% Test the Network
y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotregression(t,y)
%figure, plotresponse(t,y)
%figure, ploterrcorr(e)
%figure, plotinerrcorr(x,e)

% Closed Loop Network
% Use this network to do multi-step prediction.
% The function CLOSELOOP replaces the feedback input with a direct
% connection from the output layer.
netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,X,{},T);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(net,tc,yc)

% Step-Ahead Prediction Network
% For some applications it helps to get the prediction a timestep early.
% The original network returns predicted y(t+1) at the same time it is
% given y(t+1). For some applications such as decision making, it would
% help to have predicted y(t+1) once y(t) is available, but before the
% actual y(t+1) occurs. The network can be made to return its output a
% timestep early by removing one delay so that its minimal tap delay is now
% 0 instead of 1. The new network returns the same outputs as the original
% network, but outputs are shifted left one timestep.
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)

Vous pouvez enregistrer le script puis l’exécuter en ligne de commande afin de reproduire les résultats de la session précédente de l’application. Vous pouvez également éditer le script pour personnaliser le processus d’apprentissage. Dans ce cas, suivez chaque étape du script.

Sélectionner les données

Ce script suppose que les vecteurs prédicteurs et réponses soient déjà chargés dans l’espace de travail. Si les données ne sont pas chargées, vous pouvez les charger de la manière suivante :

load ph_dataset
Cette commande charge les prédicteurs pHInputs et les réponses pHTargets dans l’espace de travail.

Ce jeu de données est l’un des exemples de jeux de données de la toolbox. Pour des informations sur les jeux de données disponibles, veuillez consulter Exemples de jeux de données pour les réseaux de neurones peu profonds. Vous pouvez également voir une liste de tous les jeux de données disponibles en saisissant la commande help nndatasets. Vous pouvez charger les variables depuis n’importe lequel de ces jeux de données avec vos propres noms de variables. Par exemple, la commande

[X,T] = ph_dataset;
permet de charger les prédicteurs du jeu de données de pH dans le cell array X et les réponses du jeu de données de pH dans le cell array T.

Choisir un algorithme d’apprentissage

Définissez l’algorithme d’apprentissage. Le réseau utilise l’algorithme Levenberg-Marquardt par défaut (trainlm) pour l’apprentissage.

trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation.

Lorsque l’algorithme Levenberg-Marquardt ne produit pas de résultats aussi précis que vous le souhaitez ou pour les problèmes utilisant des données volumineuses, vous pouvez respectivement utiliser les fonctions d’apprentissage du réseau de la régularisation bayésienne (trainbr) ou du gradient conjugué à l’échelle (SCG) (trainscg)

net.trainFcn = 'trainbr';
net.trainFcn = 'trainscg';

Créer un réseau

Créez un réseau. Le réseau NARX, narxnet, est un réseau feedforward à deux couches, avec une fonction de transfert tan-sigmoïde par défaut dans la couche cachée et une fonction de transfert linéaire dans la couche de sortie. Ce réseau a deux entrées. L’une est une entrée externe et l’autre est une connexion de feedback depuis la sortie du réseau. Une fois que le réseau a été entraîné, cette connexion de feedback peut être fermée, comme vous le verrez lors d’une prochaine étape. Pour chacune de ces entrées, il existe une ligne de retard (TDL) pour enregistrer les valeurs précédentes. Pour définir l’architecture pour un réseau NARX, vous devez sélectionner les retards associés à chaque ligne de retard (TDL) et le nombre de neurones des couches cachées. Dans les étapes suivantes, vous définissez un nombre de retards des entrées et de retards de feedback compris entre 1 et 4 et un nombre de neurones cachés de 10.

inputDelays = 1:4;
feedbackDelays = 1:4;
hiddenLayerSize = 10;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);

Remarque

L’augmentation du nombre de neurones et du nombre de retards nécessite plus de calcul, ce qui a tendance à provoquer un surajustement des données lorsque les nombres définis sont trop élevés, mais cela permet au réseau de résoudre des problèmes plus compliqués. Un plus grand nombre de couches nécessite plus de calcul, mais cela peut permettre au réseau de résoudre des problèmes complexes plus efficacement. Pour utiliser plusieurs couches cachées, entrez les tailles des couches cachées comme éléments d’un tableau dans la commande narxnet.

Préparer les données pour l’apprentissage

Préparez les données pour l’apprentissage. Lors de l’apprentissage d’un réseau contenant des lignes de retard (TDL), il est nécessaire de remplir les retards avec les valeurs initiales des prédicteurs et des réponses du réseau. Une commande de la toolbox facilite ce processus : preparets. Cette fonction compte trois arguments d’entrée : le réseau, les prédicteurs et les réponses. La fonction renvoie les conditions initiales requises pour remplir les lignes de retard (TDL) dans le réseau et les séquences modifiées des prédicteurs et des réponses là où les conditions initiales ont été supprimées. Vous pouvez appeler la fonction de la manière suivante :

[x,xi,ai,t] = preparets(net,X,{},T);

Diviser les données

Définissez la division des données.

net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

Avec ces paramètres, les données seront divisées de manière aléatoire, 70 % des données étant utilisées pour l’apprentissage, 15 % pour la validation et 15 % pour les tests.

Entraîner le réseau

Entraînez le réseau.

[net,tr] = train(net,x,t,xi,ai);

Pendant l’apprentissage, la fenêtre d’apprentissage suivante apparaît. Cette fenêtre affiche la progression de l’apprentissage et vous permet de l’interrompre en tout point en cliquant sur le bouton d’arrêt .

Neural network training progress window

Cet apprentissage s’est arrêté lorsque l’erreur de validation a augmenté consécutivement sur six itérations.

Tester le réseau

Testez le réseau. Une fois que le réseau a été entraîné, vous pouvez l’utiliser pour calculer les sorties du réseau. Le code suivant calcule les sorties, les erreurs et la performance globale du réseau. Pour simuler un réseau avec des lignes de retard (TDL), vous devez affecter les valeurs initiales pour ces signaux retardés. Vous devez utiliser pour cela les états des entrées (xi) et les états des couches (ai) fournis par preparets lors d’une étape précédente.

y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)
performance =

    0.0042

Afficher le réseau

Affichez le schéma du réseau.

view(net)

Graphical representation of the NARX network. The network has two inputs of size 2 and 1, a time delay of 1:4, a hidden layer of size 10, and output size 1.

Analyser les résultats

Tracez les enregistrements de la performance de l'apprentissage afin de vérifier un surajustement potentiel.

figure, plotperform(tr)

Mean squared error against number of epochs for the training, validation, and test data. The best validation performance is 0.009712 at epoch 34.

Cette figure montre que les erreurs d’apprentissage et de validation diminuent jusqu’à l’epoch mise en surbrillance. Aucun surajustement n’apparaît car l’erreur de validation n’augmente pas avant cette epoch.

L’ensemble de l’apprentissage est réalisé en boucle ouverte (ou architecture série-parallèle), y compris les étapes de validation et de test. Le workflow typique consiste à créer entièrement le réseau en boucle ouverte et une fois qu’il a été entraîné (y compris les étapes de validation et de test), il est transformé en boucle fermée pour une prédiction en plusieurs étapes. De la même manière, les valeurs R dans l’application Neural Net Times Series sont calculées sur la base des résultats de l’apprentissage en boucle ouverte.

Réseau en boucle fermée

Fermez la boucle sur le réseau NARX. Lorsque la boucle de feedback est ouverte sur le réseau NARX, elle réalise une prédiction d'un seul pas en avance. Elle prédit la valeur suivante de y(t) à partir des valeurs précédentes de y(t) et de x(t). Avec la boucle de feedback fermée, elle peut être utilisée pour réaliser des prédictions de plusieurs pas en avance. En effet, les prédictions de y(t) seront utilisées à la place des valeurs futures de y(t). Les commandes suivantes permettent de fermer la boucle et de calculer la performance en boucle fermée

netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,X,{},T);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(net,tc,yc)
closedLoopPerformance =

    0.4014

Graphical representation of the NARX network with a closed loop. The outputs are fed back into the network as inputs.

Réseau de prédiction en avance

Supprimez un retard du réseau pour obtenir la prédiction un pas plus tôt.

nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)
stepAheadPerformance =

    0.0042

Graphical representation of the NARX network. The network has two inputs of size 2 and 1, a time delay of 0:3, a hidden layer of size 10, and output size 1.

Cette figure montre que le réseau est identique au réseau en boucle ouverte précédent, à ceci près que le retard a été supprimé de chaque ligne de retard. La sortie du réseau est alors y(t + 1) au lieu de y(t). Cela peut parfois être utile lors du déploiement d’un réseau pour certaines applications.

Étapes suivantes

Si les performances du réseau ne sont pas satisfaisantes, vous pouvez essayer les approches suivantes :

  • Remplacer les valeurs de poids et de biais initiaux du réseau par de nouvelles valeurs avec init et réessayer.

  • Augmenter le nombre de neurones cachés ou le nombre de retards.

  • Utiliser un jeu de données d’apprentissage plus grand.

  • Augmenter le nombre de valeurs d’entrée si des informations plus utiles sont disponibles.

  • Essayer un autre algorithme d’apprentissage (voir Training Algorithms).

Pour gagner en expérience dans les opérations en ligne de commande, essayez certaines de ces tâches :

  • Pendant l’apprentissage, ouvrez une fenêtre de tracé (telle que le tracé de corrélation des erreurs) et regardez-le s’animer.

  • Tracez en ligne de commande avec des fonctions telles que plotresponse, ploterrcorr et plotperform.

A chaque fois qu'un réseau de neurones est entraîné, il peut produire une solution différente en raison des valeurs initiales aléatoires de poids et de biais, et des différences de partition des données en jeux de données d’apprentissage, de validation et de test. Par conséquent, différents réseaux de neurones entraînés sur le même problème peuvent produire différentes sorties pour la même entrée. Pour s'assurer qu'un réseau de neurones est suffisamment précis, réalisez plusieurs apprentissages.

Il existe plusieurs autres techniques pour améliorer les résultats si vous voulez plus de précision. Pour plus d’informations, veuillez consulter Improve Shallow Neural Network Generalization and Avoid Overfitting.

Voir aussi

| | | | | | | | |

Sujets associés