はじめに
pytorch使ってmnistを試そうと思ったらまさかのダウンロードができなかったので,
ちょっと調べてみました.
とりあえず,日本語がなかった気がするので,おそらくそんなに困っている人はいないと思います.
2021/04/05追記
この日付の時点で調べたところcolabにプリインされているpytorchのバージョンが上がっていて,この問題は起こらなくなっていそうです.
torch 1.8.1+cu101
ライブラリやパッケージは結構振り回されるので,何も心配したくない人は
こんな感じで直接ダウンロードして解凍するのが良いと思います.
# MNISTのダウンロード
!wget www.di.ens.fr/~lelarge/MNIST.tar.gz
!tar -zxvf MNIST.tar.gz
# 整形方法を決定
transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,),(0.5,)) ])
# 学習データの読み込み
trainset = torchvision.datasets.MNIST(root="./", train=True, download=False, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=True, num_workers=1)
# テストデータの読み込み
testset = torchvision.datasets.MNIST(root="./", train=False, download=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=batch_size, shuffle=False, num_workers=1)
対象
- colabを使ってpytrochいじっている
- 2021年になってからmnist使っていなかった人
内容
こんなエラーがでてmnistダウンロードできずに困っていたところ,
pytrochのissueでは既に解決していた,という話.
/usr/lib/python3.7/urllib/request.py in http_error_default(self, req, fp, code, msg, hdrs)
647 class HTTPDefaultErrorHandler(BaseHandler):
648 def http_error_default(self, req, fp, code, msg, hdrs):
--> 649 raise HTTPError(req.full_url, code, msg, hdrs, fp)
650
651 class HTTPRedirectHandler(BaseHandler):
HTTPError: HTTP Error 403: Forbidden
バージョン
torch 1.7.1+cu101
torchvision 0.8.2+cu101
解決法
これで解決する.(と書いてある)
from six.moves import urllib
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
つまり,トータルこんな感じでかけばオッケーです.
import torch
import torchvision
import torchvision.transforms as transforms
from six.moves import urllib
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
# 学習の設定
## エポック
epochs = 200
## バッチサイズ
batch_size = 20
# 1. 整形方法を決定
transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,),(0.5,)) ])
# 2. 学習データの読み込み
trainset = torchvision.datasets.MNIST(root="./data", train=True, download=True, transform=transform)
train_dataloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=True, num_workers=1)
# 3. テストデータの読み込み
testset = torchvision.datasets.MNIST(root="./data", train=False, download=True, transform=transform)
test_dataloader = torch.utils.data.DataLoader(testset, batch_size=batch_size, shuffle=False, num_workers=1)
print(trainset.data.shape)
colab用のスニペットURLおいておきますね.
https://colab.research.google.com/drive/1_APWFBv-yxLDhbbphKU7HEpqG9lvVtRq?usp=sharing
おわりに
サクッと書いてみました.
バージョンによって変わると思うので,そのうちオワコン化すると思います.
オワコン化しました.