2017-05-18 3 views
1

Ich habe eine .pkl-Datei geschrieben, aber es erscheint ein Fehler, wenn ich versuche, sie zu laden.pickle.load: benötigt mehr als 2 Werte zum Entpacken

  f = open('train.pkl') 
      X, Y, X_test, Y_test = cPickle.load(f) 

oder

  X, Y ,X_test,Y_test=pickle.load(open("train.pkl","rb")) 

Beide Versuche scheiterten. Der Code zum Schreiben der .pkl-Datei lautet wie folgt. Innerhalb der Schleife die Bilder und Etiketten zu verarbeiten:

  img_ndarray = numpy.asarray(img, dtype='float64') 
      img_raw[i] = numpy.ndarray.flatten(img_ndarray) 
      img_label[i]=numpy.asarray(name,dtype='float64') 
      i=i+1 

Außerhalb der Schleife die Gurke Datei zu schreiben:

  write_file = open('train.pkl', 'wb') 
      cPickle.dump([[img_raw[0:4],img_label[0:4]], [img_raw[5:7], img_label[5:7]]],write_file, -1) 
      write_file.close() 

Sie für jede Eingabe danken.

Antwort

1

Die Fehlermeldung sollte dies offensichtlich machen, Sie haben eine Liste mit 2 Elementen gebeizt, so dass Sie nicht in 4 Namen entpacken können. Betrachten wir (was einige Daten auf):

In [35]: img_raw, img_label = range(10), 'abcdefghhijlmnop' 

In [36]: [[img_raw[0:4],img_label[0:4]], [img_raw[5:7], img_label[5:7]]] 
Out[36]: [[range(0, 4), 'abcd'], [range(5, 7), 'fg']] 

In [37]: len([[img_raw[0:4],img_label[0:4]], [img_raw[5:7], img_label[5:7]]]) 
Out[37]: 2 

Dies ist jedoch leicht behoben, da jedes der Teil-Listen hat 2 Artikel in ihnen zu:

In [38]: (X, Y) , (X_test, Y_test) = [[img_raw[0:4],img_label[0:4]], [img_raw[5:7], img_label[5:7]]] 

Und es funktioniert!

In [41]: X 
Out[41]: range(0, 4) 

In [42]: Y 
Out[42]: 'abcd' 

In [43]: X_test 
Out[43]: range(5, 7) 

In [44]: Y_test 
Out[44]: 'fg' 

In der Regel, was Sie in auspacken hat die gleiche Form haben:

In [45]: data = [[[1, 2], [3, 4, 5]],[6, [7, 8]]] 

In [46]: (((a, b), (c, d, e)), (f, (g, h))) = data 

In [47]: a,b,c,d,e,f,g,h 
Out[47]: (1, 2, 3, 4, 5, 6, 7, 8) 
+0

Danke. Es klappt. –

Verwandte Themen