从sklearn数据集下载的MNIST数据显示超时错误

时间:2018-11-01 07:37:43

标签: python scikit-learn mnist

我是ML的新手,正在尝试下载MNIST数据。我正在使用的代码是:

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')

但是,它给出了一个错误:

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

任何人都可以帮助我,以解决此问题吗?

4 个答案:

答案 0 :(得分:2)

这是问题所在,建议一些好的人解决:

https://github.com/scikit-learn/scikit-learn/issues/8588

最简单的方法是使用此下载链接下载MNIST的.mat文件:

download MNIST.mat

下载后,将文件放入〜/ scikit_learn_data / mldata文件夹中,如果该文件夹不存在,请创建该文件并将Mnist.mat放入其中。当您在本地拥有scikit时,learn学习将不会下载它并使用该文件。

答案 1 :(得分:2)

由于不建议使用fetch_mldata,因此我们将不得不移至fetch_openml。请确保将scikit学习版本更新为0.20.0或更高版本,以使openml正常工作。

  1. openml当前具有5个与MNIST数据集相关的不同数据集。 这是sklearn's document中使用mnist-784数据集的一个示例。
from sklearn.datasets import fetch_openml
# Load data from https://www.openml.org/d/554
X, y = fetch_openml('mnist_784', version=1, return_X_y=True)
  1. 或者如果您不需要非常大的数据集,则可以使用load_digits
from sklearn.datasets  import load_digits
mnist = load_digits()

请注意,如果您遵循的是使用Scikit-Learn和TensorFlow进行动手机器学习 mnist-784 数据集,您可能会注意到代码< / p>

some_digit = X[36000]
some_digit_image = some_digit.reshape(28, 28)
plt.imshow(some_digit_image, cmap=matplotlib.cm.binary, interpolation="nearest")
plt.axis('off')
plt.show()

返回一张9而不是5的图片。我想,可能是mnist-784和mnist原始图像是nist数据的两个子集,或者两个数据集之间的数据顺序是不同的。

PS:当我尝试加载数据时遇到了关于ssl的错误,就我而言,我更新openssl并已解决问题。

答案 2 :(得分:0)

尽管我不确定出现错误的原因,但是您可以尝试以下可能的方法来纠正该错误。

  1. 有时,首次下载时数据可能会损坏。在这种情况下,您需要清除可从scikit数据主目录删除的缓存。要获取此目录,可以使用-

    from sklearn.datasets.base import get_data_home 
    print (get_data_home())
    

现在清理目录,然后重新下载。

  1. 如果问题仍然存在,您可以参考以下链接进行一些尝试性错误来检查您的问题。

https://github.com/ageron/handson-ml/issues/143

https://github.com/scikit-learn/scikit-learn/issues/8588

https://github.com/ageron/handson-ml/issues/8

如果您仍然遇到问题,我想请您提供详细的追溯信息,以帮助我识别问题。

谢谢!

答案 3 :(得分:0)

如果您的sklearn版本小于.19,则“ fetch_mldata”将不起作用。您需要将sklearn升级到.23版