仅作为记录,大佬请跳过。
感谢大佬博主——传送门
步骤:
1、博主在mnist数据集官方网站,下载到了笔记本的e盘的data文件夹里:
2、用pytorch直接读取e盘里的mnist数据集
(而不用train_dataset = datasets.MNIST(’./data’, train=True, download=True, transform=transforms.ToTensor())再次下载的方式)
直接上代码
# 加载MNIST数据集
# #************************************a2torchloadlocalminist*********************************************************
class DealDataset(Dataset):
"""
读取数据、初始化数据
"""
def __init__(self, folder, data_name, label_name, transform=None):
(train_set, train_labels) = load_data(folder, data_name,
label_name) # 其实也可以直接使用torch.load(),读取之后的结果为torch.Tensor形式
self.train_set = train_set
self.train_labels = train_labels
self.transform = transform
def __getitem__(self, index):
img, target = self.train_set[index], int(self.train_labels[index])
if self.transform is not None:
img = self.transform(img)
return img, target
def __len__(self):
return len(self.train_set)
def load_data(data_folder, data_name, label_name):
with gzip.open(os.path.join(data_folder, label_name), 'rb') as lbpath: # rb表示的是读取二进制数据
y_train = np.frombuffer(lbpath.read(), np.uint8, offset=8)
with gzip.open(os.path.join(data_folder, data_name), 'rb') as imgpath:
x_train = np.frombuffer(
imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28)
return (x_train, y_train)
train_dataset = DealDataset(r'E:\第一次实验\data', "train-images-idx3-ubyte.gz",
"train-labels-idx1-ubyte.gz", transform=transforms.ToTensor())
test_dataset = DealDataset(r'E:\第一次实验\data', "t10k-images-idx3-ubyte.gz",
"t10k-labels-idx1-ubyte.gz", transform=transforms.ToTensor())
# #************************************a2torchloadlocalminist*********************************************************
# train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transforms.ToTensor())
# test_dataset = datasets.MNIST('./data', train=False, download=True, transform=transforms.ToTensor())
即只将最后两行代码,用上面的代码代替;(其余代码不变)
实测效果完全一样。
其余参考:(博主未尝试)