【问题标题】:HTTP Error when trying to download MNIST data尝试下载 MNIST 数据时出现 HTTP 错误
【发布时间】:2021-06-13 05:28:08
【问题描述】:

我正在使用 Google Colab 使用 Python3 和 PyTorch 1.8 在 MNIST 上训练 LeNet-300-100 全连接神经网络。

要应用转换并下载 MNIST 数据集,使用以下代码:

# MNIST dataset statistics:
# mean = tensor([0.1307]) & std dev = tensor([0.3081])
mean = np.array([0.1307])
std_dev = np.array([0.3081])

transforms_apply = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean = mean, std = std_dev)
    ])

给出错误:

正在下载 http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz 到 ./data/MNIST/raw/train-images-idx3-ubyte.gz -------------------------------------------------- ------------------------- HTTPError Traceback(最近的调用 最后)在() 2 train_dataset = torchvision.datasets.MNIST( 3根='./data',训练=真, ----> 4 变换 = transforms_apply,下载 = True 5) 6

11 帧 /usr/lib/python3.7/urllib/request.py 中 http_error_default(self, req, fp, code, msg, hdrs) 647 类 HTTPDefaultErrorHandler(BaseHandler): 第648章 --> 649 引发 HTTPError(req.full_url, code, msg, hdrs, fp) 650 651类HTTPRedirectHandler(BaseHandler):

HTTPError:HTTP 错误 503:服务不可用

怎么了?

【问题讨论】:

  • http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz 正在抛出 503 错误,因此您将无法下载它。您可以尝试从其他来源获取它,例如。 !wget -P ./data/MNIST/raw/ https://github.com/zalandoresearch/fashion-mnist/raw/master/data/fashion/train-images-idx3-ubyte.gz
  • @RJAdriaansen 这可能是由于 Google Colab 的后端造成的吗?
  • 不,这是http://yann.lecun.com 的服务器端错误。您无法解决此问题,因此请尝试从其他来源加载数据

标签: python pytorch


【解决方案1】:

适用于 udacity 笔记本中的 PyTorch 0.4.0。

该解决方案的灵感来自上述解决方案。

new_mirror = 'https://ossci-datasets.s3.amazonaws.com/mnist'
datasets.MNIST.urls = [
   str('/'.join([new_mirror, url.split('/')[-1]]))
   for url in datasets.MNIST.urls
]
transform = transforms.Compose([transforms.ToTensor(),
                              transforms.Normalize((0.5,), (0.5,)),
                              ])

【讨论】:

    【解决方案2】:

    你没有做错什么。这是托管数据的平台的问题。 使用 Pytorch,您可以使用以下代码下载 MNIST

    import torch
    import torchvision
    from torchvision.datasets import MNIST
    
    # Download training dataset
    dataset = MNIST(root='data/', download=True)
    

    上述 Pytorch 数据集中的 MNIST 包装器将尝试许多可能的数据可用位置。运行代码后,您可以看到它首先尝试从 Yan Le Cun 站点下载,但无法从那里下载并退回到其他可能的选项。

    潜在原因:Yan LeCun 站点缺少更新的 SSL 证书,因此某些下载文件的方法确实考虑了此安全措施,而有些则没有。

    【讨论】:

      【解决方案3】:

      这个问题已经在torchvision==0.9.1根据this解决了。作为临时解决方案,请使用以下解决方法:

      from torchvision import datasets, transforms
      datasets.MNIST.resources = [
          ('https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz', 'f68b3c2dcbeaaa9fbdd348bbdeb94873'),
          ('https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz', 'd53e105ee54ea40749a09fcbcd1e9432'),
          ('https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz', '9fb629c4189551a2d022fa330f9573f3'),
          ('https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz', 'ec29112dd5afa0611ce80d1b7f02629c')
      ]
      
      # AND the rest of your code as usual for train and test (EXAMPLE):
      batch_sz = 100
      tr_ = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
      # MNIST
      train_dataset = datasets.MNIST(
          root='./dataset', 
          train=True, 
          transform=tr_,  
          download=True
      )
      
      test_dataset = datasets.MNIST(
          root='./dataset', 
          train=False, 
          transform=tr_  
      )
      # DataLoader
      train_loader = torch.utils.data.DataLoader(
          dataset=train_dataset,
          batch_size=batch_sz,
          shuffle=True 
      )
      
      test_loader = torch.utils.data.DataLoader(
          dataset=test_dataset,
          batch_size=batch_sz,
          shuffle=False 
      )
      

      【讨论】:

        【解决方案4】:

        http://yann.lecun.com/exdb/mnist/ 上托管的 MNIST 存在很多问题,因此 pytorch 获得了许可,现在将其托管在 amazon aws 上。

        不幸的是,该修复仅在夜间构建中可用(Here 你可以找到修复的代码。)

        我发现有用的热修复是:

        from torchvision import datasets
        new_mirror = 'https://ossci-datasets.s3.amazonaws.com/mnist'
        datasets.MNIST.resources = [
           ('/'.join([new_mirror, url.split('/')[-1]]), md5)
           for url, md5 in datasets.MNIST.resources
        ]
        train_dataset = datasets.MNIST(
           "../data", train=True, download=True, transform=transform
        )
        

        更新:根据torch vision issue 3549,这将在下一个小版本中修复

        【讨论】:

          【解决方案5】:

          你可以试试这个:

          from sklearn.datasets import fetch_openml
          mnist = fetch_openml('mnist_784', data_home=".")
          
          x = mnist.data
          x = x.reshape((-1, 28, 28))
          x = x.astype('float32')
          
          y = mnist.target
          y = y.astype('float32')
          

          【讨论】:

            【解决方案6】:
            import tensorflow as tf
            mnist = tf.keras.datasets.mnist
            (x_train, y_train), (x_test, y_test) = mnist.load_data()
            

            使用它

            【讨论】:

            • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
            【解决方案7】:

            我遇到了同样的 503 错误,这对我有用

            !wget www.di.ens.fr/~lelarge/MNIST.tar.gz
            !tar -zxvf MNIST.tar.gz
            
            from torchvision.datasets import MNIST
            from torchvision import transforms
            
            train_set = MNIST('./', download=True,
            transform=transforms.Compose([
            transforms.ToTensor(),
            ]), train=True)
            
            
            test_set = MNIST('./', download=True,
            transform=transforms.Compose([
            transforms.ToTensor(),
            ]), train=False)
            

            【讨论】:

            • window 用户只需访问 www.di.ens.fr/~lelarge/MNIST.tar.gz,下载并解压缩文件。然后您将拥有 MNIST 文件夹,您将其放入 dataloader 的根目录中。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-01
            • 1970-01-01
            • 2019-01-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多