2017-03-27 1 views
0

Ich habe eine Datei BCICIV1bAF3.dat, die Daten enthalten. Die Dateigröße ist 20x1Assertionsfehler beim Training von Daten im neuronalen Netzwerk in Python?

Dies ist mein Code ...

In newff Funktion der Bereich i auf Min/Max auf Basis entscheiden, aber ich weiß nicht, wie die anderen Parameter zu entscheiden. Wie viel verborgene Schicht will ich usw.

import numpy as np 
import neurolab as nl 

input_data = np.fromfile('BCICIV1bAF3.dat' ,dtype=float) 

print(len(input_data)) 
transformed_input_data = [[x] for x in input_data] # added 
print(len(transformed_input_data)) 
output_data = np.fromfile('test.dat',dtype=float) 

transformed_output_data = [[x] for x in output_data] # added 

net = nl.net.newff([[-21, -10.5]], [1020, 1]) 
error = net.train(transformed_input_data, transformed_output_data) 
predicted_output = net.sim(input_data) 

Eingabedaten:

-10,5 -91,7 -219,8 -227 -190,8 -218,7 -208,2 -205 -214,3 -202 -211,5 -211,1 -208,2 -212,4 -206 -206,7 -211,5 -210,7 -212 -215,1

Ausgangsdaten:

-5,2 -45,6 -108,6 -112 -94,5 -106,7 -99,6 -98,5 -105,4 -101,2 -106,4 -106,5 -102,4 -105,7 -104 -97,9 -99,5 -101,3 -100,6 -103,7

Fehler:

Traceback (most recent call last): 
    File "NNwork2.py", line 15, in <module> 

    error = net.train(transformed_input_data, transformed_output_data) 
    File "C:\Python34\lib\site-packages\neurolab\core.py", line 328, in __call__ 
    assert target.shape[0] == input.shape[0] 
AssertionError 

Wie kann ich trainieren? Und simulieren Sie die Eingabedaten?

Wenn jemand führen könnte ... Ich werde sehr dankbar sein. Danke

+0

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

Antwort

1

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

+0

Vielen Dank ... es hat funktioniert :) – Uzair

+0

Ich bin froh, dass es geholfen hat! – pierscin

+0

@Uzair - hast du meine Antwort deaktiviert? – pierscin

Verwandte Themen