PyTorch重写DataSet类

PyTorch重写DataSet类


文章目录


前言

在之前沐神的Cifar-10分类 课程学习中,沐神是用的将每一类创建一个文件夹去完成图片的导入。此外我们还可以通过重写DataSet类来完成!

一、如何重写?

通过查看官方文档我们可知。

需要去重写__getitem__这个方法,去以一种特定的方法拿到一个数据。并且选择性的重写__len__这个方法,去返回整个数据集的大小。

二、具体代码

1.数据集格式

这个数据集是沐神课程上讲过的cifar-10数据集。

train和test文件夹分别为要进行训练和测试的图片。而训练数据的标签以csv文件存在trainLabels.csv文件中。

2.获取标签

python 复制代码
def read_csv_labels(fname):
    with open(fname,'r') as f:
        lines = f.readlines()[1:]
    tokens = [l.rstrip().split(',') for l in lines]
    return dict(((name,label) for name,label in tokens))

这里通过一个read_csv_labels的方法 将图片名字和标签以一个字典的方式返回

3.重写dataset

python 复制代码
class MyDateset(Dataset):
    def __init__(self,root_dir,state,label_dict=None):
        self.root_dir = root_dir
        self.state = state
        if label_dict is not None:
            self.label_dict = label_dict
        self.img_path = os.listdir(os.path.join(root_dir,state))
        # os.listdir 将当前文件夹下的图片名称按列表返回

    def __getitem__(self, idx):
        img = Image.open(os.path.join(self.root_dir,self.state,self.img_path[idx]))
        if self.state == 'train':
            img_num =self.img_path[idx].split('.')[0]
            # 这个取出来是数字.jpg 所以需要将.jpg舍去
            label = self.label_dict[img_num]
            return img,label
        else:
            return img

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

state参数表示此时是训练数据集还是测试数据集。

4.调用

python 复制代码
root_dir = "D:\\PytorchLearn\\cifar-10"
label_dict = read_csv_labels(os.path.join(root_dir,"trainLabels.csv"))

train_dataset = MyDateset(root_dir,'train',label_dict)

test_dataset = MyDateset(root_dir,'test')

train_iter = torch.utils.data.DataLoader(train_dataset,batch_size=8,shuffle=True)

总结

以上就是重写DataSet的方法,有不足之处还望各位指出。

相关推荐
TENSORTEC腾视科技10 分钟前
腾视科技重磅推出AI NAS,重塑数据管理方式,开启智能高效新时代
人工智能·ai·七牛云存储·nas·企业存储·ainas·家庭存储
qq_4142565711 分钟前
JavaScript中类继承中super关键字的调用执行逻辑
jvm·数据库·python
tanis_207717 分钟前
MinerU2.5-Pro 中文 PDF 识别准确率全解:OmniDocBench v1.6 权威基准数据
人工智能·python·pdf
我是发哥哈19 分钟前
跨AI模型生成视频的五大维度对比:选型避坑指南
大数据·人工智能·学习·机器学习·chatgpt·音视频
如去29 分钟前
第四篇《AI+教育:个性化学习的实现路径与教育公平的再平衡》
人工智能
Elastic 中国社区官方博客33 分钟前
Elastic 9.4:Workflows 正式发布、Agent Builder 更新,以及 Prometheus / PromQL 支持
运维·数据库·人工智能·elasticsearch·搜索引擎·信息可视化·prometheus
ㄟ留恋さ寂寞36 分钟前
html如何修改备注
jvm·数据库·python
2401_8844541538 分钟前
c++如何读取YAML格式配置文件_yaml-cpp库快速入门【详解】
jvm·数据库·python
2301_775639891 小时前
mysql升级时如何使用Ansible进行自动化部署_mysql自动化管理
jvm·数据库·python
机器视觉_Explorer1 小时前
【halcon】编程技巧:鼠标擦除
图像处理·人工智能·深度学习·算法·视觉检测