PyTorch如何创建自己的数据集

 更新时间:2022年11月28日 15:06:09   作者:ZQ_ZHU  
这篇文章主要介绍了PyTorch如何创建自己的数据集,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

PyTorch创建自己的数据集

图片文件在同一的文件夹下

思路是继承 torch.utils.data.Dataset,并重点重写其 __getitem__方法,示例代码如下:

class ImageFolder(Dataset):
    def __init__(self, folder_path):
        self.files = sorted(glob.glob('%s/*.*' % folder_path))

    def __getitem__(self, index):
        path = self.files[index % len(self.files)]
        img = np.array(Image.open(path))
        h, w, c = img.shape
        pad = ((40, 40), (4, 4), (0, 0))

        # img = np.pad(img, pad, 'constant', constant_values=0) / 255
        img = np.pad(img, pad, mode='edge') / 255.0
        img = torch.from_numpy(img).float()
        patches = np.reshape(img, (3, 10, 128, 11, 128))
        patches = np.transpose(patches, (0, 1, 3, 2, 4))

        return img, patches, path

    def __len__(self):
        return len(self.files)

图片文件在不同的文件夹下

比如我们有数据如下:

─── data
├── train
│ ├── 0.jpg
│ └── 1.jpg
├── test
│ ├── 0.jpg
│ └── 1.jpg
└── val
├── 1.jpg
└── 2.jpg

此时我们只需要将以上代码稍作修改即可,修改的代码如下:

self.files = sorted(glob.glob('%s/**/*.*' % folder_path, recursive=True))

其他代码不变。

pytorch常用数据集的使用

对于pytorch数据集的使用,示例代码如下:

from torch.utils.tensorboard import SummaryWriter
from torchvision.transforms import Compose
from torchvision import transforms
import torchvision
import ssl

ssl._create_default_https_context = ssl._create_unverified_context

dataset_transform = Compose([transforms.ToTensor()])


# 关于官方数据集的使用还是关键要看pytorch的官方文档
train_set = torchvision.datasets.CIFAR10(root="./CIFAR10",train=True,transform=dataset_transform,download=True)
test_set = torchvision.datasets.CIFAR10(root="./CIFAR10",train=False,transform=dataset_transform,download=True)

# 查看测试数据集中的第一个数据
# print(test_set[0])
# 查看测试数据集中的分类情况
# print(test_set.classes)
#
# 取出第一个数据中的图片(img)和分类结果(target)
# img,target = test_set[0]
# 查看图片数据的类型
# print(img)
# print(target)
# 输出类别
# print(test_set.classes[target])
# 查看图片
# img.show()

# 使用tensorboard显示tensor数据类型的图片
writer = SummaryWriter("logs")
for i in range(10):
	# 取出数据中的图片(img)和分类结果(target)
    img,target = test_set[i]
    writer.add_image("test_set",img,i)

writer.close()

上述代码运行结果在tensorboard可视化:

代码

train_set = torchvision.datasets.CIFAR10(root="./CIFAR10",train=True,transform=dataset_transform,download=True)

常用参数讲解

  • root:根目录,存放数据集的位置
  • train:若为True,则划分为训练数据集,若为False,则划分为测试数据集
  • transform:指定输入数据集处理方式
  • download:若为True,则会将数据集下载到root指定的目录下,否则不会下载

官方文档对参数的解释:

root (string) – Root directory of dataset where directory cifar-10-batches-py exists or will be saved to if download is set to True.

train (bool, optional) – If True, creates dataset from training set, otherwise creates from test set.

transform (callable, optional) – A function/transform that takes in an PIL image and returns a transformed version. E.g, transforms.RandomCrop

target_transform (callable, optional) – A function/transform that takes in the target and transforms it.

download (bool, optional) – If true, downloads the dataset from the internet and puts it in root directory. If dataset is already downloaded, it is not downloaded again.

注意:

  • 关于官方数据集的使用还是关键要看pytorch的官方文档
  • 下载数据集的细节之处:知道下载链接(下载链接可以在源码中查看)之后可以不用使用代码下载了,使用迅雷来下载可能会更快。
  • 要学会使用Pycharm中的ctrl+p和ctrl+alt这两个快捷键
  • pytorch官网
  • pytorch官方数据集(下载数据集方法)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python+OpenCV实现角度测量的示例代码

    Python+OpenCV实现角度测量的示例代码

    本文介绍如何使用python语言实现角度测量,程序包括鼠标选点、直线斜率计算、角度计算三个子程序和一个主程序,感兴趣的可以了解一下
    2022-03-03
  • Python的string模块中的Template类字符串模板用法

    Python的string模块中的Template类字符串模板用法

    通过string.Template我们可以为Python定制字符串的替换标准,这里我们就来通过示例解析Python的string模块中的Template类字符串模板用法:
    2016-06-06
  • python制作可视化GUI界面自动分类管理文件

    python制作可视化GUI界面自动分类管理文件

    这篇文章主要为大家介绍了python制作可视化GUI界面实现自动分类管理文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • sklearn的predict_proba使用说明

    sklearn的predict_proba使用说明

    这篇文章主要介绍了sklearn的predict_proba使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 基于Tensorflow批量数据的输入实现方式

    基于Tensorflow批量数据的输入实现方式

    今天小编就为大家分享一篇基于Tensorflow批量数据的输入实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python静态方法实例

    python静态方法实例

    这篇文章主要介绍了python静态方法,实例分析了python静态方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • Python中用append()连接后多出一列Unnamed的解决

    Python中用append()连接后多出一列Unnamed的解决

    Python中用append()连接后多出一列Unnamed的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Python基础教程之Pandas数据分析库详解

    Python基础教程之Pandas数据分析库详解

    Pandas是一个基于 NumPy 的非常强大的开源数据处理库,它提供了高效、灵活和丰富的数据结构和数据分析工具,本文中,我们将学习如何使用Pandas来处理和分析数据,感兴趣的小伙伴跟着小编一起来看看吧
    2023-07-07
  • pyqt 实现为长内容添加滑轮 scrollArea

    pyqt 实现为长内容添加滑轮 scrollArea

    今天小编就为大家分享一篇pyqt 实现为长内容添加滑轮 scrollArea,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 关于Python时间日期常见的一些操作方法

    关于Python时间日期常见的一些操作方法

    Python的datetime模块是处理日期和时间的强大工具,datetime类可以获取当前时间、指定日期、计算时间差、访问时间属性及格式化时间,这些功能使得在Python中进行时间日期处理变得简单高效,需要的朋友可以参考下
    2024-09-09

最新评论