学习Pytorch+Python之自定义数据集(创建CSV文件)

1、CSV文件
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。文件格式如下图,也可用Excel打开。
在这里插入图片描述在这里插入图片描述
2、简单分类数据集
本文数据集是一个蚂蚁(ants)和蜜蜂(bees)的简单的二分类数据,分别存放于dataset文件夹下的ants_image和bees_image文件夹下,用文件夹名字作为标签。
3、创建CSV文件代码

# 导入相关库
import csv
import random
import os
import glob
# 数据地址,注意是分类文件夹的上层文件夹
# dataset文件夹中的两个子文件夹分别对应两个类名
root = 'dataset'
# 对数据地址中的文件夹进行遍历,将类名存放于列表names中
names = os.listdir(root)
# 创建名为images的空列表用于存放图像地址
images = []
# 创建名称、标签字典,用于存放二分类的类名和标签
names_labels = {}

# 遍历类名
for name in names:
	# 遍历第一个类名的时候,这个时候仅有一个键,为ants_image
	# 遍历第二个类名的时候,这个时候有两个键,分别为ants_image和bees_image
	# 那么字典names_label的键的长度在第一次遍历的时候为0,第二次遍历的时候为1
    names_labels[name] = len(names_labels.keys())
    # glob.glob返回所有匹配的文件路径列表。
	# 相对于本文而言,返回的是路径dataset/ants_image/xx...xxx.jpg的文件
	# 用*号匹配复杂没有规律的所有格式为jpg的图片名,且*表示匹配0个或多个字符
    images += glob.glob(os.path.join(root, name, '*.jpg'))

print(names_labels)
print(images)

# 对csv文件进行写操作,如果没有csv文件会自动创建
# (1)图中,逗号前为文件名,逗号后为标签
# newline=''的作用是防止每一行数据后面都自动增加了一个空行
with open(os.path.join(root, 'img.csv'), mode='w', newline='') as f:
    writer = csv.writer(f)
    for img in images:
    	# 用os.sep切割具有通用性,自动识别路径分隔符windows和linus
        name = img.split(os.sep)[-2]
        label = names_labels[name]
        writer.writerow([name, label])

4、读取CSV文件

# 创建images和labels空列表用于存放数据和标签
images, labels = [], []
with open(os.path.join(root, filename)) as f:
    reader = csv.reader(f)
    for row in reader:
        img, label = row
        label = int(label)
        images.append(img)
        labels.append(label)
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用PyTorch读取CSV文件创建自定义数据集,可以按照以下步骤进行: 1. 导入所需的Python库,包括`pandas`和`torch.utils.data.Dataset`。 2. 使用`pandas`读取CSV文件,并将其转换为数据帧。可以使用`pandas.read_csv()`函数来读取CSV文件,其中文件路径可以是本地文件路径或网络文件路径。 3. 创建自定义数据集类,并将数据帧传递给`__init__()`函数。在该类中,需要实现`__len__()`和`__getitem__()`函数,用于返回数据集中的样本数和样本数据。 4. 划分训练集和测试集。可以使用`torch.utils.data.random_split()`函数来将数据集随机分成训练集和测试集。 以下是一个示例代码,它读取名为`data.csv`的CSV文件,并创建一个自定义数据集,然后将其划分为训练集和测试集: ```python import pandas as pd import torch from torch.utils.data import Dataset, random_split class CustomDataset(Dataset): def __init__(self, csv_file): self.df = pd.read_csv(csv_file) def __len__(self): return len(self.df) def __getitem__(self, idx): sample = self.df.iloc[idx] # 处理样本数据,并返回 return sample # 读取CSV文件创建自定义数据集 dataset = CustomDataset('data.csv') # 划分训练集和测试集 train_size = int(0.8 * len(dataset)) test_size = len(dataset) - train_size train_dataset, test_dataset = random_split(dataset, [train_size, test_size]) ``` 在上述示例中,`CustomDataset`类读取名为`data.csv`的CSV文件创建自定义数据集。然后,`random_split()`函数将数据集随机分成训练集和测试集,其中80%的数据分配给训练集,20%的数据分配给测试集。最后,`train_dataset`和`test_dataset`变量分别包含训练集和测试集的样本数据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值