Я пытаюсь загрузите MNIST набор данных связан here в Python 3.2 с помощью этой программы:Рассол несовместимость Numpy массивов между Python 2 и 3
import pickle
import gzip
import numpy
with gzip.open('mnist.pkl.gz', 'rb') as f:
l = list(pickle.load(f))
print(l)
К сожалению, это дает мне ошибку:
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)
Затем я попытался декодировать маринованный файл в Python 2.7 и перекодировать его. Итак, я запустил эту программу в Python 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.
Она создалась без ошибок, поэтому я перезапустил программу в Python 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)
Однако, он дал мне ту же ошибку, как и раньше. Как мне заставить это работать?
This is a better approach for loading the MNIST dataset.
есть разрывы совместимости между 2.7 и 3.x. особенно string vs unicode. И для выбора объекта numpy требуется, чтобы обе системы загружали модуль numpy, но эти модули различны. Извините, у меня нет ответа, но это может быть неудобно и, вероятно, не рекомендуется. Если это большие вещи (gzip), возможно hdf5 с pytables ?? –
@PhilCooper: Спасибо, ваш комментарий (опубликуйте это как ответ?) Подвел меня к правильному ответу. Я мог бы использовать hdf5, но мне было сложно учиться, поэтому я пошел с numpy.сохранить/загрузить, и это сработало. –
h5py очень прост в использовании, почти наверняка намного проще, чем решить проблемы с туманной совместимостью с маринованием массивов numpy. – DaveP