在 Linux 下使用 PyTorch 导入数据,通常有两种常见方式:
torch.utils.data.Dataset + DataLoader(推荐)import torch
from torch.utils.data import Dataset, DataLoader
class MyDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
# 示例数据
x = torch.randn(100, 3, 32, 32)
y = torch.randint(0, 10, (100,))
dataset = MyDataset(x, y)
dataloader = DataLoader(dataset, batch_size=8, shuffle=True)
for batch_x, batch_y in dataloader:
print(batch_x.shape, batch_y.shape)
break
import pandas as pd
import torch
from torch.utils.data import Dataset
class CSVDataset(Dataset):
def __init__(self, csv_path):
df = pd.read_csv(csv_path)
self.x = df.iloc[:, :-1].values.astype('float32')
self.y = df.iloc[:, -1].values.astype('long')
def __len__(self):
return len(self.x)
def __getitem__(self, idx):
return torch.tensor(self.x[idx]), torch.tensor(self.y[idx])
torchvision)from torchvision import datasets, transforms
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor()
])
dataset = datasets.ImageFolder(
root='/data/images/train',
transform=transform
)
loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True)
⚠️ 目录结构需为:
train/
class0/
class1/
from torchvision import datasets
train_set = datasets.MNIST(
root='./data',
train=True,
download=True,
transform=transforms.ToTensor()
)
DataLoader(..., num_workers=4)
注意:Linux 支持多进程,不要在交互式环境(如 IPython)直接跑
Linux 使用 /,推荐:
os.path.join(root, 'data')
| 数据类型 | 推荐方式 |
|---|---|
| 张量 / numpy | 自定义 Dataset |
| CSV | pandas |
| 图片 | torchvision |
| 文本 | Dataset + tokenizer |
如果你能说明:
我可以给你直接可运行的完整示例。