Ich versuche, eine einfache Neuronfunktion in C++ ähnlich diesem Bild zu schreiben. Ich verwende Sigmoid-Funktion als Aktivierungsfunktion. Einzelneuron im neuronalen Netzwerk mit C++
Das ist mein C++ Neuron Funktion
#include<math.h>
double neuron(double layer_inputs[],int iter)
{
// Feed forwarding single neuron
double network=0;
double bias=1;
double activation;
//get number of elements in the layer
const int num=sizeof(layer_inputs)/sizeof(layer_inputs[0]);
double weight[num];
for (int i = 0; i < num; i++)
{
if(iter==0)
{
//first time assigning random weights
weight[i]=rand();
}
//feed forwarding summation
network=network+(layer_inputs[i]*weight[i]+bias);
}
activation= 1.0/(1.0 + exp(-network)); //sigmoid activation function
return activation;
}
Das Problem ist, ich weiß nicht, ob ich logische Fehler in meinem Code. iter
ist die Iterationsvariable, um zu prüfen, ob das Neuron zum ersten Mal aktiviert wird. Ist mein Neuron in einem neuronalen Netzwerk richtig geschrieben?
EDIT:
Auch wenn nicht von einem programmatischen oder Quant Hintergrund ich über die Programmierung fasziniert bin, neuronale Netze und künstliche Intelligenz. Ich habe eingebaute Funktionen in caret
R verwendet, aber für mehr Verständnis möchte ich ein einfaches neurales Netzwerk von Grund auf neu erstellen. Ich habe die meisten Grundlagen aus dem Internet gelernt und poste hier meine Codes, weil ich sicher bin, dass ich ein unlogisches, aber ausführendes Skript gemacht habe.
#include<iostream>
#include <math.h>//pow, exp
#include "sqrtnn.h" //neuron()
int main()
{
double input[]= {1,4,9,16,25,36,49,64,81,100};
double output[]= {1,2,3,4,5,6,7,8,9,10};
//number of layers
double layer=3;
double output_network[10];
double error[10];
double learning_rate=0.02;
//number of iterations
int iter=10;
int input_num=sizeof(input)/sizeof(input[0]);
std::cout<<"Simple neural network for solving square root\n \nINPUT -> OUTPUT\n\n";
for (int i = 0; i < iter; i++)
{
for (int j = 0; j < input_num; j++)
{
for (int k = 0; k < layer; k++)
{
//feed forwarding
output_network[j] =neuron(input,i) ; //sigmoid activation function
//back propogation
error[j]=1/2*pow(output[j]-output_network[j],2);//error function
std::cout<<input[j]<<" -> "<< output[j]<<"= "<< error[j] <<"\n";
}
}
}
return 0;
}
Haben Sie einige Komponententests geschrieben? Definieren Sie einige Eingaben und erwartete Ausgaben und schreiben Sie Komponententests, um Ihre Funktion mit diesen Eingaben zu testen. –
Sie müssen Ihre eigenen logischen Tests vor dem Hochladen hier machen – CoffeeandCode
In der Theorie sieht es in Ordnung - solange Sie irgendwo zufällig säen. Warum hast du gefragt? Gibt es eine bestimmte Sache, um die Sie sich Sorgen machen? Wie die Kommentare sagen, versuche einige Tests zu schreiben. – doctorlove