Haben Sie andere Trainingsmethoden versucht? Ich habe in anderer Antwort gesehen, dass es geholfen hat, wegen eines Fehlers in der Bibliothek. Verfügbare Methoden:
train_gd, train_gdm, train_gda, train_gdx, train_rprop, train_bfgs (DEFAULT), train_cg
Sie können es ändern, indem Sie anrufen:
net.trainf = nl.train.train_gd
Wenn Sie Eingangsdaten liefern könnte (auch mit geänderten Werten) wäre es toll.
Ich versuchte Zug Methode für die Eingabe in Form Aufruf: [0,1,2,3...18,19]
und es ist fehlgeschlagen - I-Eingang ändern musste (und Ziel) zu [[0],[1],...[18],[19]]
EDIT:
Ihre Daten in falschem Format ist, sollten Sie verwandeln es zur Liste der Listen.Ich habe nicht scipy
auf meinem Rechner, aber versuchen Sie dies:
import numpy as np
import neurolab as nl
input_data = np.fromfile('BCICIV1bAF3.dat' ,dtype=float)
transformed_input_data = [[x] for x in input_data] # added
print(len(transformed_input_data)) # changed
net = nl.net.newff([[-215.1, -10.5]], [20, 1])
error = net.train(transformed_input_data, transformed_input_data, epochs=500) # changed
EDIT 2:
Ich werde nicht erklären, was neuronale Netz ist (ich sie nicht in eine ganze Weile verwendet haben), aber es sollte so aussehen, wenn wir 3D-Eingabe in 2D-Ausgabe mit der Verwendung von 1 verborgener Schicht zu transformieren wollen: von jedem H
INPUT [3D] | HIDDEN LAYER | OUTPUT [2D]
----
| H1 |
----
----
| X1 |
----
---- ----
| H2 | | Y1 |
---- ----
----
| X2 |
----
---- ----
| H3 | | Y2 |
---- ----
----
| X3 |
----
----
| H4 |
----
jeder X multipliziert wird und wir berechnen ausgegeben. Wie haben wir diese H-Werte? Sie werden durch Algorithmen während training
des neuronalen Netzes berechnet. Wir geben an, wie viele versteckte Ebenen wir haben wollen und durch Versuch und Irrtum zu einer befriedigenden Lösung kommen. Sehr wichtig - wir sollten verschiedene Daten verwenden, um den Ausgang des neuronalen Netzwerks zu trainieren und zu überprüfen.
Wann könnten wir dieses spezielle Netzwerk verwenden? Z.B. bei der Berechnung, wie viele Big Macs und Pommes frites bei McDonald auf der Grundlage von Alter, Gehalt des Kunden und der Platzierung eines bestimmten Restaurants bestellen. Es würde wie folgt aussehen:
-----
| AGE |
-----
---- ----------
| H2 | | BIG MACS |
---- ----------
--------
| SALARY |
--------
---- -----------
| H3 | | FRIES |
---- -----------
-------
| PLACE |
-------
----
| H4 |
----
So konnten wir die Transformation sagen wie diese f([Age, Salary, Place]) = [Big Macs, Fries]
aussieht. Wir können Millionen von Eingabe- und Ausgabedatensätzen haben, die von Mitarbeitern gesammelt wurden, um unser Netzwerk zu trainieren, also würde es in python list
von Eingängen (3D) sein und wir erwarten list
von Ausgaben (2D). Z.B. f([[A_1, S_1, P_1], [A_2, S_2, P_2], ... , [A_N, S_N, P_N]]) -> [[BM_1, F_1], [BM_2, F_2], ... , [BM_N, F_N]]
Wir Gleiche wollen mit Ihren Daten, aber wir wollen beide Ein- und Ausgang haben 1D sein, daher mussten wir jedes Element eines list
in eine andere list
zu „verpacken“. Dasselbe gilt für die Ausgabe und die Simulationseingabe - das hast du vergessen.
predicted_output = net.sim(input_data) # this won't work! You should wrap it
Aber Testen neuronale Netz auf Daten Training ist einfach falsch - Sie nicht tun sollten, dass
Aus dem Inhalt der Fehlermeldung kann ich ableiten, dass die Form Ihrer Eingabe ist nicht das, was Sie erwarten . Vielleicht sehen Sie sich das genauer an. – PinkFluffyUnicorn