1. 减少batch_size(如减少到1)是否会影响读取性能?
答:不知道是不是我电脑的原因,从32到16再到1,反复测试多次,没看出啥区别,另外还发现了一个有趣的事情,我的电脑设置多进程反而读取速度更慢。
2. 数据迭代器的性能⾮常重要。你认为当前的实现⾜够快吗?探索各种选择来改进它。
答:它的迭代器是使用DataLoader默认的顺序采样器,训练集的shuffle=True,而测试集用的是false,可以看源码:
def load_data_fashion_mnist(batch_size, resize=None): #@save
"""下载Fashion-MNIST数据集,然后将其加载到内存中"""
trans = [transforms.ToTensor()]
if resize:
trans.insert(0, transforms.Resize(resize))
trans = transforms.Compose(trans)
mnist_train = torchvision.datasets.FashionMNIST(
root="../data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(
root="../data", train=False, transform=trans, download=True)
return (data.DataLoader(mnist_train, batch_size, shuffle=True,
num_workers=get_dataloader_workers()),
data.DataLoader(mnist_test, batch_size, shuffle=False,
num_workers=get_dataloader_workers()))
在这里提一嘴这个shuffle=True的意思哈:
比如从数据集 [a,b,c,d] 取 batch_size=2 的数据,它首先会对数据集打乱得到 [b,a,d,c] 然后按顺序取 [b,a] [d,c].
至于可以提升速度的选择,有pin_memory=True表示生成的Tensor数据是属于内存中的锁页内存区,这样将Tensor数据转义到GPU中速度就会快一些,(是的,没想到吧,一直都是gpu负责操作tensor,但是tensor并不存在gpu上,当然你可以显示指定它存在gpu上) 还有num_workers的设置,但是这些感觉都见仁见智,我的电脑感觉都没啥区别 :(
会不会采样器的选择也对速度有影响呢?希望有大佬告知
3. 查阅框架的在线API⽂档。还有哪些其他数据集可⽤?
答:去看看这篇博客!
另外附上我在pycharm读取图片集的代码
def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):
figsize = (num_cols * scale, num_rows * scale)
_, axes = plt.subplots(num_rows, num_cols, figsize=figsize)
axes = axes.flatten()
for i,img,lbl in zip(axes, imgs,titles):
i.imshow(np.squeeze(img.numpy()))
i.set_title(lbl)
plt.show()