ich hatte mich mal an die Arbeit gemacht Klassen für ein Neuronales Netzwerk zu schreiben:
Code: Alles auswählen
from random import uniform
class inputneuron():
Value = 0
def setvalue(self,Value): # Setzt den Eingabewert
self.Value = Value
def getvalue(self): #Fragt den Eingabewert ab
return self.Value
class workingneuron():
Inputs = []
Weights = []
def setweights(self,*Weights): #Setzt eine Liste von Gewichten aus einer übergebenen Liste
self.Weights = Weights
def setinputs(self,*Inputs): #Setzt die zu verarbeitenden Eingaben
self.Inputs = Inputs
def resetinputs(self): #Setzt die Eingaben zurück
self.Inputs = []
def summarizeinput(self): #Multipliziert die Eingaben mit den entsprechenden Gewichten und addiert die Ergebnisse
if len(self.Weights) >= len(self.Inputs):
Count = 0
Sum = 0
for Input in self.Inputs:
Sum += Input * self.Weights[Count]
Count += 1
return Sum
else:
return 0
def calculateoutput(self): # Berechnet den Ausgabewert
Value = self.summarizeinput()
Output = 1/(1+(2.7182818285**(-(Value))))
self.resetinputs()
return Output
class neuralnetwork():
Layer1 = []
Values1 = []
Layer2 = []
Values2 = []
Layer3 = []
Values3 = []
def initialize(self): #Initialisiert die Netzwerk-Ebenen
Count = 0
while Count < 8:
self.Layer1.append(inputneuron()) # 1. Ebene
Count += 1
self.Layer2.append(workingneuron())
self.Layer2.append(workingneuron()) # 2. Ebene
self.Layer3.append(workingneuron()) # 3. Ebene
self.Layer2[0].setweights([uniform(-25.0,25.0),uniform(-25.0,25.0),uniform(-25.0,25.0),uniform(-25.0,25.0)]) # Setzt die Gewichte für Ebene 2
self.Layer2[1].setweights([uniform(-25.0,25.0),uniform(-25.0,25.0),uniform(-25.0,25.0),uniform(-25.0,25.0)])
self.Layer3[0].setweights([uniform(-25.0,25.0),uniform(-25.0,25.0)]) # Setzt die Gewichte für Ebene 3
def collectvalues1(self): # Fragt die Ergebnisse der EingabeNeuronen ab und liefert eine Liste zurück
Values = []
for Neuron in self.Layer1:
Values.append(Neuron.getvalue())
return Values
def collectvalues2(self): # Fragt die Ergebnisse von Ebene 2 ab und liefert eine Liste zurück
Values = []
for Neuron in self.Layer2:
Values.append(Neuron.calculateoutput())
return Values
def collectvalues3(self): # Fragt (die) das Ergebnis von Ebene 3 ab und liefert eine Liste zurück
Values = []
for Neuron in self.Layer1:
Values.append(Neuron.calculateoutput())
return Values
def calculateoutput(self,*Input):Berechnet den Ausgabewert des Neuronalen Netzwerks
Count = 0
for Neuron in self.Layer1:
Neuron.setvalue(Input[Count])
Count += 1
self.Values1 = self.collectvalues1
for Neuron in self.Layer2:
Neuron.resetinputs()
Neuron.setinputs(self.Values1)
self.Values2 = self.collectvalues2
for Neuron in self.Layer3:
Neuron.resetinputs()
Neuron.setinputs(self.Values2)
self.Values3 = self.collectvalues3
return self.Values3[0]
NN1 = neuralnetwork()
NN1.initialize()
print(NN1.calculateoutput([4,3,6,7,9,3,1,5]))
Hat jemand einen Lösungsansatz?Traceback (most recent call last):
File "C:\Users\herbert\Documents\Programme\NN\classes.py", line 89, in <module>
print(NN1.calculateoutput([4,3,6,7,9,3,1,5]))
File "C:\Users\herbert\Documents\Programme\NN\classes.py", line 74, in calculateoutput
Neuron.setvalue(Input[Count])
IndexError: tuple index out of range
Danke im Voraus
Peter