在 Debian 上使用 PyTorch 开展数据科学的实践路线
一 环境准备与 PyTorch 安装
二 数据工程与训练模板
python - <<‘PY’ import torch, torch.nn as nn, torch.nn.functional as F from torch.utils.data import DataLoader from torchvision import datasets, transforms
transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) # MNIST 均值与标准差 ]) train_ds = datasets.MNIST(root=‘./data’, train=True, download=True, transform=transform) test_ds = datasets.MNIST(root=‘./data’, train=False, download=True, transform=transform) train_loader = DataLoader(train_ds, batch_size=64, shuffle=True) test_loader = DataLoader(test_ds, batch_size=1000, shuffle=False)
class CNN(nn.Module): def init(self): super().init() self.conv1 = nn.Conv2d(1, 32, 3, 1, 1) self.conv2 = nn.Conv2d(32, 64, 3, 1, 1) self.pool = nn.MaxPool2d(2, 2) self.fc1 = nn.Linear(6477, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) # -> [B,32,14,14] x = self.pool(F.relu(self.conv2(x))) # -> [B,64,7,7] x = x.view(-1, 6477) x = F.relu(self.fc1(x)) return self.fc2(x)
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”) model = CNN().to(device) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) epochs = 3
for epoch in range(1, epochs+1): model.train() for data, target in train_loader: data, target = data.to(device), target.to(device) optimizer.zero_grad() loss = criterion(model(data), target) loss.backward() optimizer.step() print(f"Epoch {epoch}/{epochs} finished.")
model.eval() correct = total = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) pred = model(data).argmax(dim=1) correct += pred.eq(target).sum().item() total += target.size(0) print(f"Test accuracy: {correct/total:.4f}") PY
三 容器化与团队协作
四 常见问题与排错