Как извлечь сжатый набор данных MNIST в тестовые, обучающие наборы?

#python #python-3.x #numpy #mnist #hashlib

#python #python-3.x #тупой #mnist #hashlib

Вопрос:

Я пытаюсь извлечь сжатый файл MNIST отсюда. Как я могу сделать это из скрипта python и разделить на обучающие и тестовые образцы. Код, который я пробовал

 def fetch(url):
  import requests, gzip, os, hashlib, numpy
  fp = os.path.join("/tmp", hashlib.md5(url.encode('utf-8')).hexdigest())
  if not os.path.isfile(fp):
    with open(fp, "rb") as f:
      dat = f.read()
  else:
    with open(fp, "wb") as f:
      dat = requests.get(url).content
      f.write(dat)
  return numpy.frombuffer(gzip.decompress(dat), dtype=np.uint8).copy()
X_train = fetch("http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz")[0x10:].reshape((-1, 28, 28))
Y_train = fetch("http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz")[8:]
X_test = fetch("http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz")[0x10:].reshape((-1, 28, 28))
Y_test = fetch("http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz")[8:]
 

Я получаю ошибку FileNotFoundError: [Errno 2] No such file or directory: '/tmp/d8b415e67abd11881e156b8f111d3300'
когда я пытаюсь if not os.path.isfile(fp): быть if os.path.isfile(fp): .
Я получаю сообщение об ошибке

 > TypeError Traceback (most recent call last)
> <ipython-input-3-a98ee7ff45b8> in <module> 14 f.write(dat) 15 return
> numpy.frombuffer(gzip.decompress(dat), dtype=np.uint8).copy()
> ---> 16 X_train = fetch("http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz")[0x10:].reshape((-1,
> 28, 28)) 17 Y_train =
> fetch("http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz")[8:]
> 18 X_test =
> fetch("http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz")[0x10:].reshape((-1,
> 28, 28))
> 
> TypeError: 'NoneType' object is not subscribable
 

Как их успешно извлечь?