Niekompatybilność tablic numpy pomiędzy Pythonem 2 i 3
Próbuję załadować zestaw danych MNIST linked tutaj w Pythonie 3.2 używając tego programu:
import pickle
import gzip
import numpy
with gzip.open('mnist.pkl.gz', 'rb') as f:
l = list(pickle.load(f))
print(l)
Niestety, daje mi błąd:
Traceback (most recent call last):
File "mnist.py", line 7, in <module>
train_set, valid_set, test_set = pickle.load(f)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
Następnie próbowałem dekodować marynowany plik w Pythonie 2.7 i ponownie go zakodować. Więc uruchomiłem ten program w Pythonie 2.7:
import pickle
import gzip
import numpy
with gzip.open('mnist.pkl.gz', 'rb') as f:
train_set, valid_set, test_set = pickle.load(f)
# Printing out the three objects reveals that they are
# all pairs containing numpy arrays.
with gzip.open('mnistx.pkl.gz', 'wb') as g:
pickle.dump(
(train_set, valid_set, test_set),
g,
protocol=2) # I also tried protocol 0.
Działał bez błędu, więc przekierowałem ten program w Pythonie 3.2:
import pickle
import gzip
import numpy
# note the filename change
with gzip.open('mnistx.pkl.gz', 'rb') as f:
l = list(pickle.load(f))
print(l)
Jednak dał mi ten sam błąd, co wcześniej. Jak to uruchomić?
6 answers
To chyba jakaś niezgodność. Próbuje załadować obiekt "binstring", który zakłada się jako ASCII, podczas gdy w tym przypadku są to dane binarne. Jeśli jest to błąd w Pythonie 3 unpickler, lub "nadużycie" picklera przez numpy, Nie wiem.
Tutaj jest coś w rodzaju obejścia, ale nie wiem, jak znaczące są dane w tym momencie:
import pickle
import gzip
import numpy
with open('mnist.pkl', 'rb') as f:
u = pickle._Unpickler(f)
u.encoding = 'latin1'
p = u.load()
print(p)
Rozpakowanie go w Pythonie 2, a następnie ponowne rozpakowanie spowoduje tylko ponowne utworzenie tego samego problemu, więc musisz zapisz go w innym formacie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-04 18:17:01
Jeśli dostajesz ten błąd w python3, to może to być problem z niekompatybilnością Pythona 2 i Pythona 3, dla mnie rozwiązaniem było load
z lattin1
kodowaniem:
pickle.load(file, encoding='latin1')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 17:17:30
Wydaje się, że jest to problem niezgodności pomiędzy Pythonem 2 i Pythonem 3. Próbowałem załadować zestaw danych MNIST za pomocą
train_set, valid_set, test_set = pickle.load(file, encoding='iso-8859-1')
I zadziałało dla Pythona 3.5.2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 03:49:37
Wygląda na to, że są pewne problemy z kompatybilnością w ogórku między 2.x i 3.x ze względu na przejście na unicode. Twój plik wydaje się być marynowany za pomocą Pythona 2.x i dekodowanie w 3.x może być kłopotliwe.
Sugerowałbym wypakowanie go Pythonem 2.x i zapisywanie do formatu, który gra przyjemniej w dwóch używanych wersjach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-03 06:57:55
Natknąłem się na ten fragment. Mam nadzieję, że pomoże to wyjaśnić problem zgodności.
import sys
with gzip.open('mnist.pkl.gz', 'rb') as f:
if sys.version_info.major > 2:
train_set, valid_set, test_set = pickle.load(f, encoding='latin1')
else:
train_set, valid_set, test_set = pickle.load(f)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-28 17:12:29
Jest hickle, który jest szybszy niż ogórek i łatwiejszy. Próbowałem zapisać i przeczytać go w pickle dump, ale podczas czytania było wiele problemów i zmarnowałem godzinę i nadal nie znalazłem rozwiązania, choć pracowałem nad własnymi danymi, aby utworzyć chatbota.
vec_x
i {[3] } są tablicami numpy:
data=[vec_x,vec_y]
hkl.dump( data, 'new_data_file.hkl' )
Następnie po prostu Przeczytaj i wykonaj operacje:
data2 = hkl.load( 'new_data_file.hkl' )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 23:40:23