图像分类数据集

如果不能输出样本可视化的话,可以把show_images方法里面的ax.imshow(img.numpy())改成ax.imshow(img.permute(1, 2, 0).numpy()),然后调用的时候直接传X就行了,不用reshape。(permute方法的作用是调整维度顺序,torch和matpoltlib的默认顺序是不一样的)

附上我对 torch.transforms 的理解

torchvision 文档地址

  • torchvision.transforms 方法:图像变换操作集合包,eg.

    trans = [transforms.ToTensor()] # torchvision.transforms is v1, v2 is recommended in pytorch
    trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    
    mnist_train = torchvision.datasets.FashionMNIST(
        root="d2l_data", train=True, transform=trans, download=True)
    

    Compose() 封装一系列trans操作,依次为 ResizeToTensor,注意 Compose 前 trans 列表中的元素是一系列函数对象,代表对图像进行的操作。

    Resize(size) 对图像按照原比例方法,具体方法是 (height, width) => (size * height / width, size), height / width 即保持了原图形的比例,并按照size大小进行缩放。ToTensor() 即把图片数据从PIL类型变换成32位浮点数 Tensor 格式。

    trans = transforms.Compose(trans) 后的对象可传入 dataset 中的 transform 参数,例如

    mnist_train = torchvision.datasets.FashionMNIST(
            root="d2l_data", train=True, transform=trans, download=True)
    

练习题找发一下我找到的资料

你好,是否可以设置一个变量来取代函数的位置呢?通过修改变量的值来改变全局num_workers的取值。我不是很清楚定义函数的优点,谢谢

如果用jupyter notebook的话,需要在另一个code框里定义一个迭代器 比如it ,然后再在原本的框里用next(it),就可以了

在下面download数据集的时候有用到,是指下载下来的图片用像素的tensor形式保存,两个零是因为,数据集的每个元素是元组,包含像素的tensor和label,第一个0是定位到第一个样本,第二个0是定位到元组的第一个元素,就是张量

可以试试加入下列代码,解决“检测到多个 OpenMP 实例时,继续运行程序”,我是因为这个错误导致服务挂掉。
import os
os.environ[‘KMP_DUPLICATE_LIB_OK’] = ‘TRUE’

batch_size num_worker time(sec)
1 1 25.67
1 4 14.61
128 1 5.73
128 2 4.57
256 1 5.63
256 4 4.88

要选择合适的batch_size 和 线程

为什么非函数定义的trans = transforms.ToTensor()后面无需加上括号,而函数load_data_fashion_mnist中要赋值成trans= [transforms.ToTensor()]这种形式呢

这里他需要两种转换, totensor 和 resize , 第一个 trans列表把两种变换 放进去,在调用compose 把两个 变换 整合到一起。trans 只是 重复用了变量名字,需要多个变换组合到一起需要用compos 合起来