/* C code gradient transfer function for Neuron Network
File : model0grd.c
Ce code a été crée automatiquement par le module NEURO CODE à partir d'un
modèle neuronal développé avec un outil de la
Suite NEURO ONE
Le présent code source généré par le progiciel NEURO CODE est protégé tant
par les dispositions nationales qu'internationales en matière de droits de
la propriété intellectuelle, dont les droits sont détenus, à titre
exclusif, par la société NETRAL.
L'utilisation et la modification de ce code source est soumise à un contrat
de licence d'utilisation.
La contrefaçon est un délit pénal puni de 2 ans d'emprisonnement et de
150.000 Euros d'amende.
Le modèle du présent code source a fait l'objet d'un dépôt auprès de
l'Agence pour la Protection des Programmes sous le numéro :
IDDN.FR.001.500018.00.S.P.1999.000.20700
NETRAL ne peut en aucun cas être tenu pour responsable des conséquences de
l'utilisation de ce code.
Lisez attentivement le fichier "licfr.txt" joint à ce fichier pour
connaitre vos droits et obligations concernant l'usage de ce code.
Pour obtenir une licence ou tout renseignement complémentaire,
adressez vous à :
NETRAL
14, rue Verdi
9213 Issy-les-Moulineaux
tel : (33) 146 387 512
email: info@netral.com
Date : 25/10/2005
Time : 17:30:20
User : Jean_Luc_PLOIX
Computer : SOPHRONE
Counter : 2
NetworkName : model0
FileName : D:\Program Files\Netral\Data\Exemples\Modeles\Static.NML
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mathplus.h"
#include "model0tfr.h"
#include "model0grd.h"
/* Please check name of included header file */
void model0transfergradient(real *weights, real *inputs, real *outputs, real *gradient, real *iniback)
/*Module : model0grd
Method : model0transfergradient
Visibility : Public
Arguments : weights: real* -> poids courants
inputs: real* -> variables d'entrée
outputs: real* -> variables de sorties
gradient: real* -> vecteur gradient
iniback: real* -> initialisation de la dérivée
Description: Effectue un transfert à travers le réseau, et calcule le gradient.
Note : Pour un réseau statique, le calcul du gradient est fait par
rétropropagation */
{
real node[model0NODES][2];
real memsyn[model0ALLSYNAPSES];
real X;
real potential;
long i;
/* propagation N_Temps_Jours_ */
node[1][0] = (-1.76635217326557) +
0.0679366220486758*inputs[0];
/* propagation H0_0_ */
potential = weights[0] +
weights[1]*node[1][0];
node[2][0] = tanh(potential);
node[2][1] = (1 - node[2][0]*node[2][0]);
/* propagation H0_1_ */
potential = weights[2] +
weights[3]*node[1][0];
node[3][0] = tanh(potential);
node[3][1] = (1 - node[3][0]*node[3][0]);
/* propagation H0_2_ */
potential = weights[4] +
weights[5]*node[1][0];
node[4][0] = tanh(potential);
node[4][1] = (1 - node[4][0]*node[4][0]);
/* propagation N_Valeur_future_FF_TTC_ */
node[5][0] = weights[6] +
weights[7]*node[2][0] +
weights[8]*node[3][0] +
weights[9]*node[4][0];
node[5][1] = 1;
/* propagation Valeur_future_FF_TTC_ */
outputs[0] = 0.273782745098039 +
1.27203791008386*node[5][0];
node[6][1] = 1;
/* backpropagation Valeur_future_FF_TTC_ */
node[6][1] = iniback[0];
/* backpropagation N_Valeur_future_FF_TTC_ */
node[5][1] *= node[6][1]*1.27203791008386;
gradient[9] = node[5][1]*node[4][0];
gradient[8] = node[5][1]*node[3][0];
gradient[7] = node[5][1]*node[2][0];
gradient[6] = node[5][1];
/* backpropagation H0_2_ */
node[4][1] *= node[5][1]*weights[9];
gradient[5] = node[4][1]*node[1][0];
gradient[4] = node[4][1];
/* backpropagation H0_1_ */
node[3][1] *= node[5][1]*weights[8];
gradient[3] = node[3][1]*node[1][0];
gradient[2] = node[3][1];
/* backpropagation H0_0_ */
node[2][1] *= node[5][1]*weights[7];
gradient[1] = node[2][1]*node[1][0];
gradient[0] = node[2][1];
}
void model0transfergradientinput(real *weights, real *inputs, real *outputs, real *gradient, real *iniback)
/*Module : model0grd
Method : model0transfergradient
Visibility : Public
Arguments : weights: real* -> poids courants
inputs: real* -> variables d'entrée
outputs: real* -> variables de sorties
gradient: real* -> vecteur gradient relatif aux entrées
iniback: real* -> initialisation de la dérivée
Description: Effectue un transfert à travers le réseau, et calcule le gradient.
Note : Le calcul du gradient est fait par rétropropagation */
{
real node[model0NODES][2];
real memsyn[model0ALLSYNAPSES];
real X;
real potential;
long i;
/* propagation N_Temps_Jours_ */
node[1][0] = (-1.76635217326557) +
0.0679366220486758*inputs[0];
/* propagation H0_0_ */
potential = weights[0] +
weights[1]*node[1][0];
node[2][0] = tanh(potential);
node[2][1] = (1 - node[2][0]*node[2][0]);
/* propagation H0_1_ */
potential = weights[2] +
weights[3]*node[1][0];
node[3][0] = tanh(potential);
node[3][1] = (1 - node[3][0]*node[3][0]);
/* propagation H0_2_ */
potential = weights[4] +
weights[5]*node[1][0];
node[4][0] = tanh(potential);
node[4][1] = (1 - node[4][0]*node[4][0]);
/* propagation N_Valeur_future_FF_TTC_ */
node[5][0] = weights[6] +
weights[7]*node[2][0] +
weights[8]*node[3][0] +
weights[9]*node[4][0];
node[5][1] = 1;
/* propagation Valeur_future_FF_TTC_ */
outputs[0] = 0.273782745098039 +
1.27203791008386*node[5][0];
node[6][1] = 1;
/* backpropagation Valeur_future_FF_TTC_ */
node[6][1] = iniback[0];
/* backpropagation N_Valeur_future_FF_TTC_ */
node[5][1] *= node[6][1]*1.27203791008386;
/* backpropagation H0_2_ */
node[4][1] *= node[5][1]*weights[9];
/* backpropagation H0_1_ */
node[3][1] *= node[5][1]*weights[8];
/* backpropagation H0_0_ */
node[2][1] *= node[5][1]*weights[7];
/* backpropagation Temps_Jours_ */
node[0][1] = node[1][1]*0.0679366220486758;
gradient[0] = node[0][1];
}
NETRAL - Neuro Code 6