Ich habe angefangen ein ganz einfaches Neuronales Netz mit zwei Layern zu implementieren. Das übersetzen der ganzen Werte in Zahlen war erstmal ne ganze Menge Tipparbeit...
Jetzt habe ich allerdings ein Problem mit Python:
[src=python]def sigmoid(x, derive=False):
if derive:
return x*(1-x)
return 1/(1 + np.exp(-x))[/src]
Wenn ich da mein numpy-Array reinwerfe kriege ich IMMER ein RuntimeWarning: overflow encountered in exp.
Dabei habe ich zuerst mein Array mit normalen Werten befüllt gehabt (also Werte zwischen 0 und irgendwas Richtung 1500). Da ich gedacht habe, dass da vielleicht ein Problem bei besteht, habe ich mein Array dann Spaltenweise normalisiert - also nur noch Werte zwischen 0 und 1. Immernoch der gleiche Fehler. Derzeit weiß ich da leider nicht weiter. Hat da jemand anderes einen Tipp für mich?
EDIT:
Wenn ich den Fehler einfach ignoriere, dann setzt er entsprechende Werte automatisch auf 0, was auch richtig ist, da lim(1/large) gegen 0 geht.
Mit meinem 2-Layer Netzwerk kriege ich von insgesamt 15221 Trainingsdatensätzen nur 1781 falsche Ergebnisse. Das entspricht einer Genauigkeit von 88,29%.
Dabei habe ich alle Werte wie sie in dem Datensatz sind genommen und jeweils durchnummeriert (nach einer Sortierung der Werte von mir).
Mein Trainingdurchlauf war nur EIN MAL über den Datensatz. Mehrfaches drüberlaufen hat keine Verbesserung mehr gebracht (habe ich etwa was falsch gemacht?).
Jetzt habe ich allerdings ein Problem mit Python:
[src=python]def sigmoid(x, derive=False):
if derive:
return x*(1-x)
return 1/(1 + np.exp(-x))[/src]
Wenn ich da mein numpy-Array reinwerfe kriege ich IMMER ein RuntimeWarning: overflow encountered in exp.
Dabei habe ich zuerst mein Array mit normalen Werten befüllt gehabt (also Werte zwischen 0 und irgendwas Richtung 1500). Da ich gedacht habe, dass da vielleicht ein Problem bei besteht, habe ich mein Array dann Spaltenweise normalisiert - also nur noch Werte zwischen 0 und 1. Immernoch der gleiche Fehler. Derzeit weiß ich da leider nicht weiter. Hat da jemand anderes einen Tipp für mich?
EDIT:
Wenn ich den Fehler einfach ignoriere, dann setzt er entsprechende Werte automatisch auf 0, was auch richtig ist, da lim(1/large) gegen 0 geht.
Mit meinem 2-Layer Netzwerk kriege ich von insgesamt 15221 Trainingsdatensätzen nur 1781 falsche Ergebnisse. Das entspricht einer Genauigkeit von 88,29%.
Dabei habe ich alle Werte wie sie in dem Datensatz sind genommen und jeweils durchnummeriert (nach einer Sortierung der Werte von mir).
Mein Trainingdurchlauf war nur EIN MAL über den Datensatz. Mehrfaches drüberlaufen hat keine Verbesserung mehr gebracht (habe ich etwa was falsch gemacht?).
Nächste Idee (1):
Ein weiteres Layer einführen. Dadurch könnte sich schon die Komplexität positiv für mich auswirken.
Nächste Idee (2):
Andernfalls wollte ich vielleicht noch sowas wie die Zeiten etwas komprimieren und zum Beispiel auf Stunden runden oder beispielsweise aus den Lichtverhältnissen oder der Wetterlage mehrere Input-Parameter machen, da dort ja mehrere Informationen drinstecken, die in dem Text derzeit einfach zu komprimiert verschlüsselt sind, um dies effektiv in Zahlen abbilden zu können.
Ein Problem, dass ich allgemein sehe mit der Durchnummerierung von den Text-Werten: Ich nutze nur eine Funktion, die effektiv Zahlen miteinander multipliziert. Allerdings wären bei diesem Problem vermutlich auch Ungleichungen sinnvoll. Also sowas wie 'Wert > 0,5 ? 1: 0' oder so. Allerdings nicht bei allen Parametern.
Komplexe Idee (3):
Ich habe mir überlegt die Daten aus einem Datensatz weiter aufzuteilen. beispielsweise möchte ich alles was mit dem Wetter zu tun hat in ein Array extrahieren (beachte (2)) und so weiter. Diese Arrays möchte ich dann nicht in ein gemeinsames Layer werfen, sondern in voneinander getrennte Layer, damit ich bis zum nächsten Layer dann verschiedene Aktivierungsfunktionen für die Neuronen nutzen kann. Anschließend würde ich die Ergebnisse dieser Operationen wieder zu einem weiteren Layer zusammenführen und von dort aus ein Ergebnis bestimmen lassen.
Leider habe ich aktuell die Befürchtung, dass dabei mein Können überschritten wird. Das Aufbauen der Layer und Gewichte ist dabei nicht das Problem. Das ist Tipparbeit aber nicht übermäßig schwierig. Ich denke aber, dass ich es nicht hinkriegen würde, die Fehlerkorrektur, also das eigentliche Lernen, da vernünftig einzubauen. Möchte sich jemand mit mir Zusammentun und da einmal drüber quatschen?
Ein weiteres Layer einführen. Dadurch könnte sich schon die Komplexität positiv für mich auswirken.
Nächste Idee (2):
Andernfalls wollte ich vielleicht noch sowas wie die Zeiten etwas komprimieren und zum Beispiel auf Stunden runden oder beispielsweise aus den Lichtverhältnissen oder der Wetterlage mehrere Input-Parameter machen, da dort ja mehrere Informationen drinstecken, die in dem Text derzeit einfach zu komprimiert verschlüsselt sind, um dies effektiv in Zahlen abbilden zu können.
Ein Problem, dass ich allgemein sehe mit der Durchnummerierung von den Text-Werten: Ich nutze nur eine Funktion, die effektiv Zahlen miteinander multipliziert. Allerdings wären bei diesem Problem vermutlich auch Ungleichungen sinnvoll. Also sowas wie 'Wert > 0,5 ? 1: 0' oder so. Allerdings nicht bei allen Parametern.
Komplexe Idee (3):
Ich habe mir überlegt die Daten aus einem Datensatz weiter aufzuteilen. beispielsweise möchte ich alles was mit dem Wetter zu tun hat in ein Array extrahieren (beachte (2)) und so weiter. Diese Arrays möchte ich dann nicht in ein gemeinsames Layer werfen, sondern in voneinander getrennte Layer, damit ich bis zum nächsten Layer dann verschiedene Aktivierungsfunktionen für die Neuronen nutzen kann. Anschließend würde ich die Ergebnisse dieser Operationen wieder zu einem weiteren Layer zusammenführen und von dort aus ein Ergebnis bestimmen lassen.
Leider habe ich aktuell die Befürchtung, dass dabei mein Können überschritten wird. Das Aufbauen der Layer und Gewichte ist dabei nicht das Problem. Das ist Tipparbeit aber nicht übermäßig schwierig. Ich denke aber, dass ich es nicht hinkriegen würde, die Fehlerkorrektur, also das eigentliche Lernen, da vernünftig einzubauen. Möchte sich jemand mit mir Zusammentun und da einmal drüber quatschen?
Zuletzt bearbeitet: