如何分别制作自定义 DataLoader return 值和标签?
How to make a custom DataLoader return values and labels seperately?
我想使用具有匹配值和标签的批处理来迭代自定义 DataLoader。需要对下面描述的 PandasDataset 进行修改,因为我是从网上复制的,所以我不太了解它是如何工作的
import torch
import pandas as pd
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
class PandasDataset(Dataset):
def __init__(self, dataframe):
self.dataframe = dataframe
def __len__(self):
return len(self.dataframe)
def __getitem__(self, index):
return self.dataframe.iloc[index]
d = {'values': [1, 2], 'values2': [3, 4],'labels': [5, 6]}
df = pd.DataFrame(data=d)
dataset = PandasDataset(df)
loader = DataLoader(torch.tensor(dataset), batch_size=1, shuffle=False)
for batch_index, (values, label) in enumerate(loader):
print(values)
print(label)
您可以将 __getitem__
更改为如下内容:
def __getitem__(self, index):
data = self.dataframe.iloc[index].to_numpy()
return data[:-1], data[-1]
那么,你不需要用 torch.tensor
:
包装你的数据集
loader = DataLoader(dataset, batch_size=1, shuffle=False)
它会 return:
next(iter(loader))
# >>> [tensor([[1, 3]]), tensor([5])]
我想使用具有匹配值和标签的批处理来迭代自定义 DataLoader。需要对下面描述的 PandasDataset 进行修改,因为我是从网上复制的,所以我不太了解它是如何工作的
import torch
import pandas as pd
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
class PandasDataset(Dataset):
def __init__(self, dataframe):
self.dataframe = dataframe
def __len__(self):
return len(self.dataframe)
def __getitem__(self, index):
return self.dataframe.iloc[index]
d = {'values': [1, 2], 'values2': [3, 4],'labels': [5, 6]}
df = pd.DataFrame(data=d)
dataset = PandasDataset(df)
loader = DataLoader(torch.tensor(dataset), batch_size=1, shuffle=False)
for batch_index, (values, label) in enumerate(loader):
print(values)
print(label)
您可以将 __getitem__
更改为如下内容:
def __getitem__(self, index):
data = self.dataframe.iloc[index].to_numpy()
return data[:-1], data[-1]
那么,你不需要用 torch.tensor
:
loader = DataLoader(dataset, batch_size=1, shuffle=False)
它会 return:
next(iter(loader))
# >>> [tensor([[1, 3]]), tensor([5])]