vince152
Messages postés6Date d'inscriptionsamedi 23 février 2008StatutMembreDernière intervention 1 mars 2008
-
25 févr. 2008 à 23:01
nabilenit
Messages postés1Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention 8 juin 2011
-
8 juin 2011 à 16:16
Bonjour à tous,
Y aurait-il une bonne âme pour me traduire ce morceau de code en Visual Basic ?
Je connais à peine le C et je n'arrive pas à convertir ce morceau de code.
Merci.
NHenry
Messages postés15151Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 4 septembre 2024159 26 févr. 2008 à 09:57
Bonjour
Je ne vois pas la déclaration de la fonction (il devrait y avoir au moins un "main()") ?
for member as integer=0 to 14
'Mot clé réservé (in)
'Input et in sont déclarés où ? et sont de quels type ?
Input(member).act=in(member)
next member
for member as integer=0 to 9
'Déclaration de unit et Hidden1 ?
unit=Hidden1(member)
sum=0 'Déclaré en flottant il me semble
for source as integer=0 to unit.NoOfSources-1
sum+=unit.sources(source).act*unit.weights(source)
next source
unit.act=Math.ATan(sum + unit->Bias) 'Pas sur de mon code ici, mais _
regarde dans l'espace de nom System.Math
Next member
member=0 'La boucle indique que member ne peux valoir que 0
'Déclaration de Output1 ?
unit=Output1(member)
sum=0 'Déclaré en flottant il me semble
for source as integer=0 to unit.NoOfSources-1
sum+=unit.sources(source).act*unit.weights(source)
next source
voilà pour la traduction brut, mais si tu était un peu plus exhaustif, ce serais plus clair, car là, ton code est peu compréhensible (d'où des erreurs de traduction possible).
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
vince152
Messages postés6Date d'inscriptionsamedi 23 février 2008StatutMembreDernière intervention 1 mars 2008 26 févr. 2008 à 12:01
Merci NHenry pour ton aide. Effectivement j'ai donné s'une partie du code pour ne pas alourdir le message. Je te donne le code dans son intégralité afin de compléter les incertitudes, car pour l'instant je ne suis pas en mesure de l'incorporer dans mon programme plus général. Et merci encore.
typedef struct UT {
float act; /* Activation */
float Bias; /* Bias of the Unit */
int NoOfSources; /* Number of predecessor units */
struct UT **sources; /* predecessor units */
float *weights; /* weights from predecessor units */
} UnitType, *pUnit;
/* Forward Declaration for all unit types */
static UnitType Units[27];
/* Sources definition section */
static pUnit Sources[] = {
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10,
Units + 11, Units + 12, Units + 13, Units + 14, Units + 15,
Units + 16, Units + 17, Units + 18, Units + 19, Units + 20, Units + 21, Units + 22, Units + 23, Units + 24, Units + 25,
int thales(float *in, float *out, int init)
{
int member, source;
float sum;
enum{OK, Error, Not_Valid};
pUnit unit;
/* layer definition section (names & member units) */
static pUnit Input[15] = {Units + 1, Units + 2, Units + 3, Units + 4, Units + 5, Units + 6, Units + 7, Units + 8, Units + 9, Units + 10, Units + 11, Units + 12, Units + 13, Units + 14, Units + 15}; /* members */
static pUnit Hidden1[10] = {Units + 16, Units + 17, Units + 18, Units + 19, Units + 20, Units + 21, Units + 22, Units + 23, Units + 24, Units + 25}; /* members */
static pUnit Output1[1] = {Units + 26}; /* members */
NHenry
Messages postés15151Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 4 septembre 2024159 26 févr. 2008 à 13:12
Bonjour
Public class UnitType
act as single
Bias as single
NoOfSources as integer
sources as UnitType(,)
weights as single()
public sub SetValues(byval pAct as single,byval pBias as single, byval _
pNoOfSource as integer, byval pSources as UnitType(,), byval pWeights as _
single())
'A faire assignation, de simples =
End sub
End Structure
'Quelle différence entre pUnit et UnitType ?
private Units(26) as new UnitType
private Sources as UnitType()=new UnitType(){Units(0), ...} 'Là c'est sûr il _
faut utiliser une classe, revoir pour éviter cette gestion
public sub Init() 'Indispensable pour le code des lignes 71 à 206
Units(0).SetValues(0, 0, 0, new UnitType(,){{}} , new single(){})
Units(1).SetValues(0, -0.847670, 0, new UnitType(,){Sources(0)},Weights) _
'ATTENTION : Pour le 4ième paramètres, je ne suis pas sur que ça marche
'Le dernier est passé par valeur, donc le tableau aura des valeur propres à _
lui et non commune avec Weights() définit avant la Sub
...
End sub
public function Thales(byref pIn as single,byref pOut as single, byval pInit as _
integer)
dim lMember, lSource as Integer
dim lSum as single
enum{OK, Error, Not_Valid}; 'LIGNE NON TRADUITE, revoir son utilisation
dim lUnit as UnitType=new UnitType()
'Layer definition section (names & member units)
static lInput(14) as UnitType=new UnitType(){Units(1),Units(2), ...}'Members
static lHidden(9) as UnitType=new UnitType(){Units(16),Units(17),...}'Members
static lOutput(0) as UnitType=new UnitType(){Units(26)}'Ne fait pas de _
référence vers Units(26)
vince152
Messages postés6Date d'inscriptionsamedi 23 février 2008StatutMembreDernière intervention 1 mars 2008 27 févr. 2008 à 19:39
Ouh là ! Ca se corse. Je sui un débutant. J'ai essayé de coder la dernière partie comme ci-après. Est-ce que mon code correspond à la dernière partie aux noms de variables près ? Parce que je n'arrrive toujopurs pas à recalculer exactement les sorties du modèle.
For
i% = 1
To ninput%unit(i%) = unit(i%) + bias(i%)
Next i%
For i% = ninput% + 1
To nhidden% + ninput%sum = 0
For j% = 1
To ninput%sum += +w(i%, j%) * unit(j%)
Next j%unit(i%) = Math.Tanh(sum + bias(i%))
Next i%
For i% = nhidden% + ninput% + 1
To nhidden% + ninput% + noutput%sum = 0
For j% = ninput% + 1
To nhidden% + ninput%sum += +w(i%, j%) * unit(j%)
NHenry
Messages postés15151Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 4 septembre 2024159 28 févr. 2008 à 08:30
Bonjour
Evite les % et autres $ ou # pour spécifier un type, il faut le dé&clarer correctement (met Option Explicit et Option Strict à On).
Astuce personnelle : mets une majuscule dans tes noms de variable (VB n'étant pas sensible à la casse), cela te permettra de voir rapidement si tu as déclaré ta variable avant et si tu n'as pas fais de faute de frappe.
Je reprend ton code :
Dim nInput as integer
dim nHidden as integer
dim nOutput as integer
Dim sum,w(,),bias() as double 'ou Single
'Et les autres déclarations nécessaires
For i as integer = 1 To ninput
unit(i) = unit(i) + bias(i)
Next i
For i as integer = ninput + 1 To nhidden + ninput
sum = 0
For j as integer = 1 To ninput
sum += w(i, j) * unit(j)
Next j
unit(i) = Math.Tanh(sum + bias(i))
Next i
For i as integer = nhidden + ninput + 1 To nhidden + ninput + noutput
sum = 0
For j as integer = ninput + 1 To nhidden + ninput
sum += w(i, j) * unit(j)
Next j
unit(i) = (sum) + bias(i)
Next i, ----
(Coloration syntaxique automatique par Kenji)
Ne connaissant pas l'algorithme mathématique utilisé, je ne puis faire de correction sur la logique.
J'ai quand même constaté que tu utilises Unit(#) en tant que valeur alors qu'il s'agit d'une classe (comportant des attributs), donc je suppose que tu dois avoir un pb quelque part.
Si tu as une idée du comment ça doit faire les calcul (algorithme ou algorigramme), je pourrais être plus précis.
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
vince152
Messages postés6Date d'inscriptionsamedi 23 février 2008StatutMembreDernière intervention 1 mars 2008 29 févr. 2008 à 16:23
Les w sont les weight; les sum sont les sum, bias sont bias. Je m'interroge sur la propriété .act et sur la fonction in.
Ai-je bien transcris la propriété .Act comme il faut ainsi que la fonction in ?
Pour info , il s'agit d'uin reseau de neurones . 15 entrées , 10 neurones cachés, une sortie (26) . Mais je sais pas si ca va t'aider. Ce que je cherche à faire c'est à recalculer le modele en fonction des entrées (15). Mais je ne suis pas sur des fonctions mathématiques utilisées. C'est pourquoi je m'interroge sur .act et in : que foni-ils sur les données : une sommation avec le biais pour les 15 entrées=> 15 entrées activées , une application de la fonction tanh(sum,bias) sur les entrées activées pour les neurones cachés, une sommation avec le biais pour la sortie ?
NHenry
Messages postés15151Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 4 septembre 2024159 29 févr. 2008 à 16:35
Bonjour
Pour info, je n'ai jamais codé de réseau neuronaux, je n'ai pas encore chercher à comprendre comment ça marche. Je ne te serais par conséquent pas d'un grande aide concernant la logique utilisée. dsl.
Je te conseillerais peut être de poser un autre message, en pointant vers celui-ci pour que les autres voient le chemin parcouru, parce que là je serais incapable de t'aider d'avantage, la retranscription du code étant ma seule vue du problème, je ne pourrais pas t'aider plus que sur des problèmes syntaxique.
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site