Essayer d'implémenter un perceptron en C, ne peut pas l'entraîner. La sortie va toujours juste à zéro et je ne sais pas ce qui ne va pas. Bien que, je soupçonne que ce soit la fonction delta ou que je mette en œuvre incorrectement le perceptron.Perceptron en C échoue à s'entraîner
Merci d'avance à tous ceux qui aident!
#include<stdio.h>
#define arrayLength(x) (sizeof(x)/sizeof((x)[0]))
typedef int bool;
enum { false, true };
int main(){
float trainInputs [2][2] = {{0.0f, 1.0f}, {0.0f, 0.0f}};
float trainOutputs [2][1] = {{1.0f}, {0.0f}};
int amontOfTrainData = 1;
float inputs [] = {0.0f, 1.1f};
float outputs [] = {0.0f};
float wights [(arrayLength(inputs) * arrayLength(outputs))] = {0.5f, 0.5f, 0.5f, 0.5f};
float learningRate = 0.01f;
float delta(float actual, float want, float wight){
float error = want - actual;
float out = error * learningRate * wight;
printf(":%.6f:\n", out);
return out;
}
// Run perceptron
void run(bool train){
int outputInc = 0;
int wightInc = 0;
while(outputInc < arrayLength(outputs)){
int inputInc = 0;
while(inputInc < arrayLength(inputs)){
if(train){
int x = 0;
while(x < amontOfTrainData){
outputs[outputInc] = trainInputs[x][inputInc] * wights[wightInc];
wights[wightInc] = delta(outputs[outputInc], trainOutputs[x][outputInc], wights[wightInc]);
x++;
}
}else{
outputs[outputInc] = inputs[inputInc] * wights[wightInc];
}
inputInc++;
wightInc++;
}
//printf("out[%i]: %.5f\n", outputInc, outputs[outputInc]);
outputInc++;
}
}
int b = 0;
while(b < 100){
run(true);
b++;
}
printf("-----------[ 100 LOOPS DONE ]-----------\n");
run(false);
return 0;
}
'typedef int bool;' => S'il vous plaît utiliser standard, inclure '' –
Stargateur
La longueur de ce tableau est 2, mais vous fournir 4 initializers: 'flotter nécrophages [(arrayLength (entrées) * arrayLength (sorties))] = {0.5f, 0.5f, 0.5f, 0.5f}; ' – MondKin
Notez que les définitions de fonctions imbriquées ne sont pas autorisées en C, bien qu'il existe une extension gcc qui lui permet .... –