Sto provando a lavorare con CIFAR-10 dataset che contiene a special version for python.Come leggere i dati serializzati da python2 cPikle con python3 pickle?
Si tratta di un insieme di file binari, ognuno dei quali rappresenta un dizionario di matrici di 10 caratteri. I file sono stati ovviamente creati da python2 cPickle
.
ho cercato di caricarlo da python2 come segue:
import cPickle
with open("data/data_batch_1", "rb") as f:
data = cPickle.load(f)
Questo funziona davvero grande. Tuttavia, se provo a caricare i dati da python3 (non cPickle
ma pickle
ha invece), viene a mancare:
import pickle
with open("data/data_batch_1", "rb") as f:
data = pickle.load(f)
Se non riesce con il seguente errore:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)
Posso in qualche modo trasformare il dataset originale in uno nuovo che sarà leggibile da python3? O posso in qualche modo leggerlo direttamente da python3?
Ho provato a caricarlo da cPickle
, lo scarico in json
e la lettura indietro di pickle
, ma matrici NumPy, ovviamente, non può essere scritto in un file JSON.
Proprio per gli altri che trovano questo tramite Google: se si applica questa correzione, quindi ottenere un messaggio 'TypeError : deve essere un carattere unicode, non byte, la tua versione numpy è troppo vecchia e ha [bug] (https://github.com/numpy/numpy/issues/4879). –
forse meglio usare latin1 e non i byte –
@ShimonDoodkin: ciò dipenderebbe interamente dai dati. E solo perché Latin-1 funziona sempre non significa che tu abbia effettivamente dati Latin-1. –