一些PyTorch小细节

dataset的数据长度问题

  • 调用构建的my_dataset.__len__()获取的是数据的原始长度,比如一共有1000张图像,返回的就是1000
  • 使用len(my_dataloader)返回的是batch的数量,比如1000张图像,使用batchsize为8,那么返回的就是250.

numpy.squeeze返回值类型

ndarray使用squeeze之后,其返回值是tuple类型,如果将这个类型的数据返回给pytorch的__getitem__方法,则最后dataset返回的数据类型为list,而不是一个torch.Tensor数据类型。

只有将ndarray数据类型返回给__getitem__,最后dataloader返回的数据类型才能自动转为torch.Tensor;

此外,函数返回值是一个ndarray和一个[]类型时,如果只用一个参数接收,那么会两个参数总体变成一个tuple。道理也非常简单,就是函数的多个返回值是个tuple中的多个元素。

Ref