在 CentOS 上使用 PyTorch 导入数据,方式和在其它 Linux / Windows 上基本一致,主要取决于你的数据格式。下面按常见场景给你总结。
python -c "import torch; print(torch.__version__)"
torch.utils.data.Dataset + DataLoader(最推荐)import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import os
class MyDataset(Dataset):
def __init__(self, img_dir, label_file):
self.img_dir = img_dir
self.labels = self._load_labels(label_file)
def _load_labels(self, path):
labels = {}
with open(path) as f:
for line in f:
name, label = line.strip().split()
labels[name] = int(label)
return labels
def __len__(self):
return len(self.labels)
def __getitem__(self, idx):
img_name = list(self.labels.keys())[idx]
img_path = os.path.join(self.img_dir, img_name)
img = Image.open(img_path).convert("RGB")
label = self.labels[img_name]
return img, label
dataset = MyDataset("images/", "labels.txt")
loader = DataLoader(dataset, batch_size=32, shuffle=True)
for x, y in loader:
print(x.shape, y)
import pandas as pd
import torch
data = pd.read_csv("data.csv")
x = torch.tensor(data.iloc[:, :-1].values, dtype=torch.float32)
y = torch.tensor(data.iloc[:, -1].values, dtype=torch.long)
import numpy as np
import torch
arr = np.load("data.npy")
tensor = torch.from_numpy(arr)
from torchvision import datasets, transforms
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor()
])
dataset = datasets.ImageFolder("data/train", transform=transform)
loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True)
from torchtext.data.utils import get_tokenizer
from torchtext.vocab import build_vocab_from_iterator
tokenizer = get_tokenizer("basic_english")
def yield_tokens(data_iter):
for text in data_iter:
yield tokenizer(text)
vocab = build_vocab_from_iterator(yield_tokens(train_texts))
CentOS 路径区分大小写:
/data/train != /data/Train
ls -l data/
chmod -R 755 data/
如 PIL 报错:
pip install pillow
| 数据类型 | 推荐方式 |
|---|---|
| 图片 | ImageFolder / 自定义 Dataset |
| CSV | pandas + tensor |
| NumPy | from_numpy |
| 文本 | torchtext |
| 大规模 | Dataset + DataLoader |
如果你能告诉我:
我可以给你完全可直接运行的示例代码。