pytorch---之dataloader使用pandas读取csv(不一次性将csv全部读入内存)

我们使用pandas的read_csv()函数中的iterators=True 来将csv循环分批读取进内存,(如果不使用iterators参数的话,数据量很大的csv文件,会全部读到内存当中去,内存肯定不够)代码如下:

# -*- coding: utf-8 -*-

import csv
import pandas as pd
import numpy as np
import torch
import torch.utils.data as data


class FaceLandmarksDataset(data.Dataset):
	"""Face Landmarks dataset."""
	def __init__(self, csv_file):
		"""
        Args:
            csv_file (string): Path to the csv file with annotations.
            root_dir (string): Directory with all the images.
            transform (callable, optional): Optional transform to be applied
                on a sample.
        """
		self.landmarks_frame = pd.read_csv(csv_file, iterator=True)
	def __len__(self):
		#print len(self.landmarks_frame)
		#return len(self.landmarks_frame)
		return 1800000
	def __getitem__(self, idx):
		print idx
		landmarks = self.landmarks_frame.get_chunk(128).as_matrix().astype('float')
		# landmarks = self.landmarks_frame.ix[idx, 1:].
您好!关于您的问题,可以使用Python中的pandas库来读取CSV文件,然后使用pytorch的Dataset和DataLoader类来创建自定义数据集并划分训练集和测试集。 以下是一个示例代码: ```python import pandas as pd import torch from torch.utils.data import Dataset, DataLoader from sklearn.model_selection import train_test_split # 读取CSV文件 data = pd.read_csv('your_csv_file.csv') # 定义自定义数据集类 class MyDataset(Dataset): def __init__(self, data): self.data = data def __len__(self): return len(self.data) def __getitem__(self, index): # 在这里对数据进行预处理和转换 # 返回一个样本 return torch.tensor(self.data.iloc[index, :]) # 划分训练集和测试集 train_data, test_data = train_test_split(data, test_size=0.2) # 创建自定义数据集实例和DataLoader实例 train_dataset = MyDataset(train_data) test_dataset = MyDataset(test_data) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False) ``` 以上代码中,首先使用pandas读取CSV文件,然后定义了一个自定义数据集类,该类继承自pytorch中的Dataset类,并实现了`__len__`和`__getitem__`方法。 在`__getitem__`方法中,可以对数据进行预处理和转换,例如,根据CSV文件中的格式,将每一行转换为一个Tensor。 接下来使用scikit-learn库中的`train_test_split`函数将数据集划分为训练集和测试集。 最后,使用DataLoader类可以方便地将数据集批量加载到内存中,进行模型训练和测试。 希望这个回答可以帮助您!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值