La parte dove uso la funzione e' questa:
codice:
void NeuralNet::run(vector<double> inputs) {
double totInput = 0;
for (int i = 0; i < layers.size(); i++) { // Per ogni livello
cout << "---------------------------------------------------\n\n";
cout << "Sono al layer " << i << endl;
if (i == 0) { // Se sono al primo layer prendo l'input dai neuroni di input
for (int j = 0; j < layers[i].numNeurons(); j++) {
for (int k = 0; k < numInputs; k++) {
totInput += layers[i].getNeuron(j).getWeight(k) * inputs[k];
}
layers[i].getNeuron(j).setValue(Sigmoid(totInput));
cout << "Sigmoid(totInput) per il neurone (" << i << ", " << j << ") e' " << Sigmoid(totInput) << endl;
cout << "Sigmoid(totInput) per il neurone (" << i << ", " << j << ") e' " << layers[i].getNeuron(j).returnValue() << endl;
totInput = 0;
}
} else {
for (int j = 0; j < layers[i].numNeurons(); j++) {
for (int k = 0; k < numNHL; k++) {
totInput += layers[i].getNeuron(j).getWeight(k) * layers[i-1].getNeuron(k).returnValue();
cout << layers[i-1].getNeuron(k).returnValue() << endl;
}
cout << "totInput per il neurone (" << i << ", " << j << ") e' " << totInput << endl;
layers[i].getNeuron(j).setValue(Sigmoid(totInput));
totInput = 0;
}
}
}
}
E' all'interno di un'altra classe che contiene il vettore layers da quale richiamo il singolo oggetto su cui eseguire la funzione... Chiaramente l'output della seconda e' della terza riga in grassetto, sebbene dovrebbe essere uguale, e' diverso.
La classe Neuron e' la seguente:
codice:
class Neuron {
public:
Neuron(int in_links);
void setValue(double cv);
double returnValue();
int numWeights() const;
double getWeight(int i);
private:
double nvalue;
vector<double> weights;
};