Pytorch: 使用Dataset和DataLoader读取本地csv文件

import numpy as np
import pandas as pd
from PIL import Image
from torch import optim,nn
import torch.nn.functional as F
from torchvision import transforms
from torch.utils.data.dataset import Dataset

class DatasetFromCSV(Dataset):
    def __init__(self, csv_path, height, width, transforms=None):

        self.data = pd.read_csv(csv_path)
        self.labels = np.asarray(self.data.iloc[:, 0])
        self.height = height
        self.width = width
        self.transforms = transforms

    def __getitem__(self, index):
        single_image_label = self.labels[index]
        # 读取所有像素值,并将 1D array ([784]) reshape 成为 2D array ([28,28])
        img_as_np = np.asarray(self.data.iloc[index][1:]).reshape(28, 28).astype(float)
        # 把 numpy array 格式的图像转换成灰度 PIL image
        img_as_img = Image.fromarray(img_as_np)
        img_as_img = img_as_img.convert('L')
        # 将图像转换成 tensor
        if self.transforms is not None:
            img_as_tensor = self.transforms(img_as_img)
            # 返回图像及其 label
        return (img_as_tensor, single_image_label)

    def __len__(self):
        return len(self.data.index)



batch_size = 64
transform = transforms.Compose([transforms.ToTensor(),
                                transforms.Normalize((0.5,),(0.5,))])

train_data= DatasetFromCSV('./data/train.csv', 28,28,transform)
test_data = DatasetFromCSV("./data/test.csv",28,28,transform)

train_loader = torch.utils.data.DataLoader(train_data,batch_size=batch_size)
test_loader = torch.utils.data.DataLoader(test_data,batch_size=batch_size)

img,lab = next(iter(train_loader))
print(img.shape)

 

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: PyTorch可以通过Pandas库读取CSV文件,并将其转换为PyTorch Dataset对象。以下是一个示例代码: ```python import pandas as pd import torch from torch.utils.data import Dataset class MyDataset(Dataset): def __init__(self, csv_file): self.data = pd.read_csv(csv_file) def __len__(self): return len(self.data) def __getitem__(self, idx): sample = self.data.iloc[idx] x = torch.tensor(sample[:-1].values, dtype=torch.float32) y = torch.tensor(sample[-1], dtype=torch.long) return x, y ``` 在这个例子中,我们首先使用Pandas库读取CSV文件,并将其存储在`self.data`中。然后,我们实现了`__len__`和`__getitem__`方法,以便PyTorch可以使用它们来获取数据集的长度和每个样本的数据和标签。在`__getitem__`方法中,我们首先使用`iloc`方法获取指定索引的样本,然后将其转换为PyTorch张量。最后,我们将数据和标签作为元组返回。 要使用这个数据集,我们可以像这样实例化它: ```python dataset = MyDataset('data.csv') ``` 然后,我们可以使用PyTorchDataLoader来加载数据集并进行训练: ```python from torch.utils.data import DataLoader dataloader = DataLoader(dataset, batch_size=32, shuffle=True) for batch in dataloader: x, y = batch # 训练模型 ``` 在这个例子中,我们使用了一个批次大小为32的DataLoader,并将其设置为随机打乱数据集。在每个迭代中,我们从DataLoader中获取一个批次,并将其用于训练模型。 ### 回答2: PyTorch是一个开源的Python机器学习库,它提供了高度可定制的且快速的实现机器学习算法的方法。在PyTorch中,可以使用自定义的数据集来训练模型。在本文中,我们将介绍如何使用PyTorch读取CSV文件并生成数据集。 首先,我们需要安装PyTorch和Pandas库。Pandas库是一个用于数据操作和分析的工具,可以处理CSV文件。我们可以通过执行以下命令来安装这两个库: ```python pip install torch pandas ``` 假设我们有一个包含以下数据的CSV文件: ``` Name,Age,Gender John,25,Male Jane,30,Female Adam,35,Male ``` 我们将使用Pandas库读取CSV文件并转换为PyTorch数据集。下面是代码: ```python import pandas as pd import torch # Load CSV file using pandas data = pd.read_csv('file.csv') # Convert data to PyTorch dataset class CustomDataset(torch.utils.data.Dataset): def __init__(self, data): self.data = data.values def __getitem__(self, index): row = self.data[index] name = row[0] age = row[1] gender = row[2] # Convert data to tensors name = torch.tensor(name) age = torch.tensor(age) gender = torch.tensor(gender) return name, age, gender def __len__(self): return len(self.data) # Create dataset object dataset = CustomDataset(data) # Print dataset for data in dataset: print(data) ``` 在上面的代码中,我们使用Pandas库读取CSV文件。然后,我们创建了一个自定义的数据集对象,并将Pandas数据框转换为PyTorch张量。我们使用torch.tensor()函数将数据转换为PyTorch张量。 最后,我们打印了数据集来确认它是否正确生成。 通过上述代码,就能够成功的读取CSV文件并生成PyTorch数据集,方便进行模型训练。 ### 回答3: PyTorch是一门深度学习框架,提供了一种方便的方式读取和处理数据。在很多的应用场景中,数据通常被存储在CSV格式中,如果可以快速、方便的读入数据,就能够更快地进行数据预处理,加速模型的训练。 在PyTorch中,我们可以利用CSV数据生成一个dataset来进行训练。需要用到的库是`pandas`和`torch.utils.data.Dataset`。具体步骤如下: 1. 读取CSV文件 使用`pandas`库中的`read_csv`函数可以很容易地读取CSV格式的数据,并且可以方便地从中提取需要的信息。在读取时,我们可以设置参数`delimiter`来指定分隔符,以便正确地解析数据。例如: ```python import pandas as pd data=pd.read_csv('path/to/csv/file',delimiter=',') ``` 这就将数据读取到了`data`变量中,可以利用`data.head()`函数打印出前5行数据来检查一下读取的结果。 2. 实现Dataset 我们需要实现一个新的dataset,继承自`torch.utils.data.Dataset`。在`__init__`函数中可以初始化数据、标签等信息,用`len`函数来告知该dataset的大小。在`__getitem__`函数中,可以利用index来访问某条数据,并将其转换成PyTorch所需的格式,在这里,可以将数据转换成tensor,并返回其相应的标签信息。代码示意如下: ```python from torch.utils.data import Dataset import pandas as pd import torch class MyDataset(Dataset): def __init__(self, csv_file): self.data = pd.read_csv(csv_file,delimiter=',') self.labels = self.data['label'] self.data = self.data.drop(['label'], axis=1) def __len__(self): return len(self.data) def __getitem__(self, idx): data = torch.tensor(self.data.iloc[idx].values,dtype=torch.float32) label = torch.tensor(self.labels[idx],dtype=torch.long) return data, label ``` 3. 使用DataLoader加载数据 PyTorch提供了一个方便的工具类——DataLoader,来帮助我们将数据集放入batch中进行训练。可以调用`torch.utils.data.DataLoader` 方法来对dataset进行封装,将数据batch化,按次序提供。如下所示: ```python from torch.utils.data import DataLoader dataset = MyDataset('path/to/file.csv') dataloader = DataLoader(dataset, batch_size=64, shuffle=True) ``` 这就生成了一个dataloader对象,可以利用这个对象迭代读取dataset中的数据,每次输出一个batch的数据。 总之,PyTorch提供了非常方便的接口来读取CSV格式的数据集,我们可以利用Pandas库来读取CSV文件,然后构建自己的DatasetDataLoader,用于模型的训练。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值