Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras 如何导入已手动下载的MNIST数据集?_Keras - Fatal编程技术网

Keras 如何导入已手动下载的MNIST数据集?

Keras 如何导入已手动下载的MNIST数据集?,keras,Keras,我一直在尝试一个Keras示例,它需要导入MNIST数据 from keras.datasets import mnist import numpy as np (x_train, _), (x_test, _) = mnist.load_data() 它会生成错误消息,如上的异常:URL获取失败https://s3.amazonaws.com/img-datasets/mnist.pkl.gz: 无--[Errno 110]连接超时 它应该与我使用的网络环境有关。是否有任何函数或代码可以让

我一直在尝试一个Keras示例,它需要导入MNIST数据

from keras.datasets import mnist
import numpy as np
(x_train, _), (x_test, _) = mnist.load_data()
它会生成错误消息,如上的
异常:URL获取失败https://s3.amazonaws.com/img-datasets/mnist.pkl.gz: 无--[Errno 110]连接超时

它应该与我使用的网络环境有关。是否有任何函数或代码可以让我直接导入手动下载的MNIST数据集

我尝试了以下方法

import sys
import pickle
import gzip
f = gzip.open('/data/mnist.pkl.gz', 'rb')
  if sys.version_info < (3,):
    data = pickle.load(f)
else:
    data = pickle.load(f, encoding='bytes')
f.close()
import numpy as np
(x_train, _), (x_test, _) = data
导入系统 进口泡菜 导入gzip f=gzip.open('/data/mnist.pkl.gz',rb') 如果sys.version_info<(3,): 数据=pickle.load(f) 其他: data=pickle.load(f,encoding='bytes') f、 关闭() 将numpy作为np导入 (x_列,uu),(x_测试,u)=数据 然后我得到以下错误消息

Traceback (most recent call last):
File "test.py", line 45, in <module>
(x_train, _), (x_test, _) = data
ValueError: too many values to unpack (expected 2)
回溯(最近一次呼叫最后一次):
文件“test.py”,第45行,在
(x_列,uu),(x_测试,u)=数据
ValueError:要解压缩的值太多(应为2个)

嗯,
keras.dataset.mnist
文件。您可以手动模拟相同的操作,即:

  • 从下载数据集
  • 导入gzip
    f=gzip.open('mnist.pkl.gz','rb')
    如果sys.version_info<(3,):
    数据=cPickle.load(f)
    其他:
    data=cPickle.load(f,encoding='bytes')
    f、 关闭()
    (x_列,uu),(x_测试,u)=数据
    

  • 您不需要额外的代码,但可以告诉
    load\u data
    首先加载本地版本:

  • 您可以从另一台具有适当(代理)访问权限的计算机下载文件(从)
  • 将其复制到目录
    ~/.keras/datasets/
    (在Linux和macOS上)
  • 并使用正确的文件名运行
    load_data(path='mnist.npz')

  • Keras文件位于Google云存储中的新路径中(在AWS S3之前):

    使用时:

    tf.keras.datasets.mnist.load\u data()

    您可以传递
    路径
    参数

    load_data()
    将调用
    get_file()
    ,该函数以参数
    fname
    为参数,如果路径是完整路径且文件存在,则不会下载该文件

    例如:

    # gsutil cp gs://tensorflow/tf-keras-datasets/mnist.npz /tmp/data/mnist.npz
    # python3
    >>> import tensorflow as tf
    >>> path = '/tmp/data/mnist.npz'
    >>> (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data(path)
    >>> len(train_images)
    >>> 60000
    
  • 下载文件
    https://s3.amazonaws.com/img-datasets/mnist.npz
  • mnist.npz
    移动到
    .keras/datasets/
    目录
  • 加载数据

    import keras
    from keras.datasets import mnist
    
    (X_train, y_train), (X_test, y_test) = mnist.load_data()
    

  • keras.datasets.mnist.load_data()
    将尝试从远程存储库获取数据,即使指定了本地文件路径。但是,加载下载文件的最简单解决方法是使用
    numpy.load()
    ,:


    嗨,西吉,谢谢你的建议。但是,我收到了更新帖子中显示的错误消息。唯一不同的是我用的是泡菜。看起来它在加载数据时没有给我错误。我已经检查过了,它可以在我的系统上运行,包括pickle和cPickle以及python2和python 3。您确定您有相同的文件(md5 b39289ebd4f8755817b1352c8488b486)吗?它可以工作,不知道以前为什么有错误消息。非常感谢。在我的例子中,添加这些导入
    import sys;进口泡菜;进口gzip
    并使用
    pickle
    而不是
    cPickle
    ——我在macOs Mojavet上使用Python 3.6.7这正是我想要的,非常感谢Tardist加载数据函数不再有路径参数
    # gsutil cp gs://tensorflow/tf-keras-datasets/mnist.npz /tmp/data/mnist.npz
    # python3
    >>> import tensorflow as tf
    >>> path = '/tmp/data/mnist.npz'
    >>> (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data(path)
    >>> len(train_images)
    >>> 60000
    
    import keras
    from keras.datasets import mnist
    
    (X_train, y_train), (X_test, y_test) = mnist.load_data()
    
    path = '/tmp/data/mnist.npz'
    
    import numpy as np
    
    with np.load(path, allow_pickle=True) as f:
        x_train, y_train = f['x_train'], f['y_train']
        x_test, y_test = f['x_test'], f['y_test']